Ich habe zwei Threads. In dem Hauptthread werden die dbf geöffnet und gelesen/geschrieben. Je nach dem, was in dem Nebenthread (macht alle 10 Sekunden eine Kontrolle, ob alles OK ist) passiert sollen diese dbf aber geschlossen werden. Nun werden dbf aber natürlich Thread-Lokal geöffnet - wie also bekomme ich das hin, das ich die dbf im Hauptthread schließen kann?
Jan
Thread-Übergreifendes DbCloseAll() [Erledigt]
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Thread-Übergreifendes DbCloseAll() [Erledigt]
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Thread-Übergreifendes DbCloseAll()
du musst signale setzen oder gesharte Variablen benutzen um dem jeweiligen Thread mitzuteilen, dass etwas geschehen soll - und es im richtigen Thread erledigen lassen.
Das ist ähnlich dem Kaffeeautomaten Beispiel bei Threads.
Ob das so sinnvoll ist weiß ich nicht.
Das ist ähnlich dem Kaffeeautomaten Beispiel bei Threads.
Ob das so sinnvoll ist weiß ich nicht.
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9358
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Thread-Übergreifendes DbCloseAll()
Einfach eine Set-Get-Funktion "CloseData" einführen, die u.a. vom Hauptthread geprüft wird:
CloseData() ohne Parameter gibt zurück, ob ein Close ausgeführt werden soll. CloseData(.T.) setzt die Antwort auf ja, CloseData(.F.) setzt sie auf nein. Damit könnte der Haupthread auf die Situation reagieren, dass er plötzlich keine Tabellen mehr hat. Ähliche Set-Get-Funktionen könnten parallel darüber informieren, ob aktuell die Tabellen geöffnet sind oder nicht. Eine PUBLIC könnte das allerdings auch bewerkstelligen.
Ansonsten kann man natürlich auch versuchen, den Zerospace zu verwenden, also über DbRequest() und DbRelease() die Workspaces zwischen den Threads zu verschieben. Ich glaube allerdings nicht, dass Du das in Deinem konkreten Fall verwenden könntest.
Code: Alles auswählen
FUNCTION CloseData(lSet)
STATIC lCloseData := .F.
IF PCount()=1
lCloseData := lSet
ENDIF
RETURN lCloseData
Ansonsten kann man natürlich auch versuchen, den Zerospace zu verwenden, also über DbRequest() und DbRelease() die Workspaces zwischen den Threads zu verschieben. Ich glaube allerdings nicht, dass Du das in Deinem konkreten Fall verwenden könntest.
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Thread-Übergreifendes DbCloseAll()
Hallo Hubert und Tom,
das hab ich jetzt mit einer PUBLIC gemacht, die ich im Hauptthread an passender Stelle berücksichtige.
Danke für die Tipps.
Jan
das hab ich jetzt mit einer PUBLIC gemacht, die ich im Hauptthread an passender Stelle berücksichtige.
Danke für die Tipps.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.