Threads

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Threads

Beitrag von georg »

Hallo,


Freitag abend hatte ich eine Unterhaltung zum Thema Threads, und es ist sicher auch meinem schlechten Namensgedächtnis geschuldet, dass ich mich nicht mehr erinnere, wer mich gefragt hat.

Hintergrund war die Frage, wie Threads beendet werden können, da beim Beenden über den Close-Button der Thread noch sichtbar bleibt.

Ich habe das mal in einem meiner Programme nachvollzogen:

Code: Alles auswählen

   ...
   WHILE nEvent <> xbeP_Close
      ..
   END
RETURN(.T.)
Wenn man das Programm im Debugger ablaufen lässt, und nach dem Schliessen des Dialogs, der im Zusammenhang mit dem Thread steht, bleibt der Thread im Debugger sichtbar - allerdings nur für einige Sekunden, dann entfernt der Garbage-Collector den Thread aus dem Speicher.

Aus Dokumentationszwecken könnte man auch folgenden Code verwenden, damit deutlich ist, dass der Thread hier beendet wird:

Code: Alles auswählen

   ...
   WHILE nEvent <> xbeP_Close
      ..
   END
   ThreadObject():quit()
RETURN(.T.)
Erforderlich ist es nicht, aber man sieht dann auch nach einem Jahr, dass hier der Thread beendet wird. Leider habe ich in der Dokumentation keinen Hinweis darauf gefunden, was mit Threads passiert, die über den obersten Code-Ausschnitt beendet werden, und basiere meine Aussagen auf dem Verhalten, dass ich im Debugger sehe.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Threads

Beitrag von Herbert »

Kann es sein, dass der Debugger erst nach einer Weile merkt, dass der Thread längstens weg ist und daher dessen Dasein noch kurz vorspielt?
Auch ich finde es richitg, trotzdem ein Beenden einzuprogrammieren. Sicher ist sicher und deine Argumente treffen.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Threads

Beitrag von Tom »

Wenn man sich im TaskManager die Anzahl der Threads zu (s)einer Applikation anzeigen lässt, sieht man, dass sich diese fast sofort reduziert, wenn ein solcher Thread beendet wird. Ich arbeite schon seit vielen Jahren auf diese Weise. Es ist nicht nötig, über das "RETURN" hinaus, das das Modul beendet, irgendwelche Mechanismen einzubauen, die den Thread vermeintlich beenden, killen oder löschen. Und mit dem Garbage Collector hat das auch nichts zu tun, verwaiste Threads (die es auch nicht geben kann) gehören nicht zu seinem Aufgabenfeld. (Edit: Ausnahme: Das Threadobjekt ist PRIVATE oder PUBLIC, was man tunlichst unterlassen sollte.)
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Threads

Beitrag von brandelh »

Alaska hat immer betont, dass das Ende des Hauptprogrammes alle offenen Threads schließt (abwürgt).
Wenn also nach dem Schließen des Fensters noch Threads über bleiben, werden die von etwas blockiert z.b. extere Zugriffe die Wartezeiten auslösen ...
mir fällt da nur ein Zugriff auf ein nicht existierendes Verzeichnis ein, eventuell auch TCP/IP Requests ...

Ich würde mal prüfen ob das Hauptprogramm überhaupt geschlossen wird, die Post Funktionen könnten das protokollieren.
Gruß
Hubert
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Threads

Beitrag von Klaus Schuster »

Threads zu Beenden behandelte Clayton Jones recht ausgiebig in "Dialog Windows in Recycled Threads".
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Threads

Beitrag von georg »

Erst einmal vielen Dank für die Rückmeldung.

@Tom: wo kann ich im Windows-Taskmanager sehen, welche Threads mein Xbase++-Programm hat? Ich setze Windows 10 ein und bin im TaskManager leider nicht fündig geworden.

@Klaus: danke für die Erinnerung an den Artikel (http://www.cjcom.net/articles/artdirt1.htm)

Allerdings verweist Clayton auch auf die Verwendung von ThreadObject():quit() hin, so dass ich mit diesem Gedanken nicht ganz alleine dastehe.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Threads

Beitrag von Herbert »

Hallo Georg
Unter "Details" kannst du sehr viele Spalten mit der rechten Maustaste in der Ueberschriftenzeile ein- oder ausblenden. Dort findest du die Spalte "Threads".
Grüsse Herbert
Immer in Bewegung...
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Threads

Beitrag von georg »

Danke, Herbert -


das ist gut versteckt.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten