Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#1

Threads "korrekt" beenden

  Alt 30. Jan 2009, 18:11
Hi,

es geht um folgendes:

Angenommen, ich habe eine Klasse von TThread abgeleitet und verwende sie so einfach wie möglich, indem ich einfach den Konstruktor aufrufe und den Rest dem Thread überlasse. FreeOnTerminate wird im Konstruktor auf true gesetzt, sodass der Thread nach seiner Arbeit automatisch zerstört wird.

In meinem Programm steht dann ja nur noch ein TMyThread.Create(...) drin, und da ich es nicht brauche, speichere ich auch das neue Objekt nirgends.

Nun kommt aber irgendwer auf die Idee, das Programm zu beenden während der Thread noch läuft. Dann wird dieser ja sofort abgebrochen.

Schöner wäre es ja, wenn erstmal nur die Methode Terminate des Threads aufgerufen wird und das Programm sich erst dann komplett beendet, wenn die gerade laufenden Threads allesamt auch beendet sind.

Nur wie kann ich das erreichen, wo ich doch keinen Zugriff mehr auf die Objekte habe?


Gibt es einen besseren Ansatz als die laufenden Threads in eine TObjectList einzutragen? Dann müsste ich bei FreeOnTerminate nämlich immer auch noch das OnTerminate entsprechend implementieren, damit sich die Threads auch selbst wieder rauslöschen, ansonsten würde die Liste ja bereits freigegebene Objekte enthalten. Was anderes fällt mir nämlich nicht ein auf das Ende des Threads zu reagieren.

Mfg
FAlter

[edit] Mit WM_QUERYENDSESSION im Thread abfragen geht es nicht unbedingt - es soll für alle Nachfahren von TThread gelten, auch für fremde... [/edit][edit]Und der Thread könnte ja eh nicht schnell genug darauf reagieren, da die Reaktion auch abgebrochen werden würde. [/edit]
Felix Alter
  Mit Zitat antworten Zitat