Offene DBF schließen - aus 2.Thread ?
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Offene DBF schließen - aus 2.Thread ?
Hallo,
ich rufe mit setTimerEvent() eine Funktion auf, welche regelmäßig prüft, ob eine Datei im Netz steht. Wenn ja, wird das Programm abgebrochen.
QUIT schließt ja alle offenen Dateien, aber ich habe auch temporäre Dateien offen, die normalerweise in einer Funktion nach CLOSE ALL gelöscht werden, bevor das Programm beendet wird.
nachträgliche Anmerkung
es handelt sich um ein altes Programm nach Clipper Art, das Hauptprogramm kann in einem READ, ACHOICE, einer FOR-NEXT-Schleife oder sonstwo sein und hat keine Ahnung dass es beendet werden soll ... die Abbruchfunktion gibt 5 Minuten vorher Warnungen raus, bevor Quit kommt, aber die Abbruchfunktion und nicht das Hauptprogramm beenden das Programm.
Diese Funktion AppQuit() von mir rufe ich auch von der setTimerEvent-Testfunktion auf, aber dann arbeitet die Abbruchfunktion nicht mehr im ersten Thread, somit wirkt das CLOSE ALL nicht und die temporären Dateien bleiben stehen.
Weiß jemand, wie man einen Workspace eines anderen Threads schließen kann ? In der Onlinehilfe habe ich zwar den Hinweis auf ein Umschalten gefunden, aber nicht wie es geht. Außerdem scheint man den Alias erst freischalten zu müssen, was ich ja nicht kann.
Am einfachsten wäre es, wenn der neue Thread auch auf dem alten Workspace aufsetzen würde.
ich rufe mit setTimerEvent() eine Funktion auf, welche regelmäßig prüft, ob eine Datei im Netz steht. Wenn ja, wird das Programm abgebrochen.
QUIT schließt ja alle offenen Dateien, aber ich habe auch temporäre Dateien offen, die normalerweise in einer Funktion nach CLOSE ALL gelöscht werden, bevor das Programm beendet wird.
nachträgliche Anmerkung
es handelt sich um ein altes Programm nach Clipper Art, das Hauptprogramm kann in einem READ, ACHOICE, einer FOR-NEXT-Schleife oder sonstwo sein und hat keine Ahnung dass es beendet werden soll ... die Abbruchfunktion gibt 5 Minuten vorher Warnungen raus, bevor Quit kommt, aber die Abbruchfunktion und nicht das Hauptprogramm beenden das Programm.
Diese Funktion AppQuit() von mir rufe ich auch von der setTimerEvent-Testfunktion auf, aber dann arbeitet die Abbruchfunktion nicht mehr im ersten Thread, somit wirkt das CLOSE ALL nicht und die temporären Dateien bleiben stehen.
Weiß jemand, wie man einen Workspace eines anderen Threads schließen kann ? In der Onlinehilfe habe ich zwar den Hinweis auf ein Umschalten gefunden, aber nicht wie es geht. Außerdem scheint man den Alias erst freischalten zu müssen, was ich ja nicht kann.
Am einfachsten wäre es, wenn der neue Thread auch auf dem alten Workspace aufsetzen würde.
Zuletzt geändert von brandelh am Fr, 23. Jun 2006 12:27, insgesamt 1-mal geändert.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 193
- Registriert: Fr, 09. Jun 2006 7:52
- Wohnort: Nähe Sömmerda
Hallo Hubert,
setze doch im Main-Thread eine Static- oder Klassenvariable beim Start auf False. Der Timerthread setzt diese dann auf True.
In der Event-Schleife der Main-Prozedur ist dann nur noch diese Variable zu überwachen und entsprechend zu reagieren. Es lassen sich auch beliebige Aktionen ausführen, wenn man anstelle des logischen z.B. einen numerischen Wert verwendet.
Viele Grüße Gerd
setze doch im Main-Thread eine Static- oder Klassenvariable beim Start auf False. Der Timerthread setzt diese dann auf True.
In der Event-Schleife der Main-Prozedur ist dann nur noch diese Variable zu überwachen und entsprechend zu reagieren. Es lassen sich auch beliebige Aktionen ausführen, wenn man anstelle des logischen z.B. einen numerischen Wert verwendet.
Viele Grüße Gerd
-
- Rekursionen-Architekt
- Beiträge: 193
- Registriert: Fr, 09. Jun 2006 7:52
- Wohnort: Nähe Sömmerda
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Offene DBF schließen - aus 2.Thread ?
moin,
gruss by OHR
Jimmy
also wenn du wirklich ALLE Datenbanken schliessen willst :brandelh hat geschrieben:ich rufe mit setTimerEvent() eine Funktion auf, welche regelmäßig prüft, ob eine Datei im Netz steht. Wenn ja, wird das Programm abgebrochen.
QUIT schließt ja alle offenen Dateien, aber ich habe auch temporäre Dateien offen, die normalerweise in einer Funktion nach CLOSE ALL gelöscht werden, bevor das Programm beendet wird.
Code: Alles auswählen
WorkSpaceEval( {|| DbUnlockAll(), DbCloseAll() } )
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo
als ich eben die Festplatte nach dem Suchbegriff WorkSpace durchsuche, finde ich unter anderem die Datei:
xppw32\source\sys\AppExit.prg
und es fällt wir wie Schuppen von den Augen.
Diese EXIT Funktion hatte ich schon mal gesehen.
Am Ende dieser Datei wäre genau der richtige Ort um meine Dateien zu löschen
oh diese Vergesslichkeit ...
als ich eben die Festplatte nach dem Suchbegriff WorkSpace durchsuche, finde ich unter anderem die Datei:
xppw32\source\sys\AppExit.prg
und es fällt wir wie Schuppen von den Augen.
Diese EXIT Funktion hatte ich schon mal gesehen.
Am Ende dieser Datei wäre genau der richtige Ort um meine Dateien zu löschen
oh diese Vergesslichkeit ...
Gruß
Hubert
Hubert