Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Setzt FreeOnTerminate Thread auf nil?
GerhardS - Do 29.10.09 23:40
Titel: Setzt FreeOnTerminate Thread auf nil?
Hallo,
in einem Worker-Thread habe ich in der Execute-Prozedur FreeOnTerminate auf true gesetzt. In diesem Thread wird eine Stringliste mit allen Dateien in einem vorher ausgewählten Verzeichnis erstellt, was je nach Verzeichnisgröße eine spürbare Rechenzeit in Anspruch nimmt. Im Main-Thread wird diese Stringliste in MyThread.OnTerminate in eine neue Stringliste kopiert.
Das klappt alles ganz gut, solange zwischen dem Aufruf des Worker-Threads und der Verwendung dieser Stringliste mehrere andere Aktionen liegen. Wenn ich diese Aktionen weglasse und nach MyThread.OnTerminate (in letzterem zeigt ein ShowMessage das Ende der Threadausführung an) abfrage, ob der Worker-Thread = nil ist, erhalte ich eine negative Antwort. Verzichte ich auf die Abfrage, erhalte ich falsche Ergebnisse.
Bisher bin ich davon ausgegangen, dass mit FreeOnTerminate ein Thread nach Arbeitsende "automatisch" auf nil gesetzt wird und die Abarbeitung von MyThread.OnTerminate erst dann erfolgt, wenn der Thread beendet ist. Irre ich mich da?
Anders gefragt: wie lasse ich den Main-Thread auf das Ende des Workers-Threads warten? WaitForSingleObject(MyThread.handle, INFINITE) wartet ja solange der Thread noch "lebt".
Ich arbeite mit Delphi 2009.
Edit:
Ich habe das Problem (nach einem Blick in mein Archiv) gelöst: In MyThread.OnTerminate kommen die Aktionen rein, die auf dem Ergebnis des Worker-Threads beruhen. Damit klappt's.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!