Offene DBF schließen - aus 2.Thread ?

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Offene DBF schließen - aus 2.Thread ?

Beitrag von brandelh »

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.
Zuletzt geändert von brandelh am Fr, 23. Jun 2006 12:27, insgesamt 1-mal geändert.
Gruß
Hubert
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag von Gerd König »

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Gerd,

dummerweise ist es ein Programm im Clipperstil ...
irgenwo im READ, einer FOR NEXT Schleife ... :?
Gruß
Hubert
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag von Gerd König »

:oops: aus diesem Grund progge ich nur GUI :wink:
Gerd
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Gerd König hat geschrieben::oops: aus diesem Grund progge ich nur GUI :wink:
Gerd
bei neuen Sachen mache ich auch nur noch GUI, aber es ist schon sehr alt ...
Gruß
Hubert
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Hubert,

erstelle eine logische Public-Variable, die du in deinen Threads abfragst und wenn notwendig die Threads richtig abschliessen.
Vor dem Beenden muss du dann die Variable setzen und evtl. mit sleep() eine wartepause anlegen.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Offene DBF schließen - aus 2.Thread ?

Beitrag von AUGE_OHR »

moin,
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.
also wenn du wirklich ALLE Datenbanken schliessen willst :

Code: Alles auswählen

WorkSpaceEval( {|| DbUnlockAll(), DbCloseAll() } ) 
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Jimmy,

das ist es, was ich brauche WorkSpaceEval() ... :D Danke.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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 :wink:

oh diese Vergesslichkeit ... :?
Gruß
Hubert
Antworten