Thread über TTimer abschiessen
-
Sorry, falsch kopiert (aber richtig gelesen!).
Terminate setzt die Eigenschaft Terminated des Thread auf true und signalisiert, daß der Thread so bald wie möglich beendet werden sollte. Im Gegensatz zu der Windows-API-Methode TerminateThread, die den Thread sofort beendet, fordert die Methode Terminate den Abbruch des Thread nur an. Dadurch kann der Thread vor seiner Beendigung noch erforderliche Aufräumarbeiten durchführen.
Wenn jetzt in der Execute-Funktion auf Terminate geprüft und die Funktion beendet wird, warum schlägt das delete dann trotzdem fehl?
Terminate() setzt lediglich FTerminated und damit die Eigenschaft Terminated auf true. Die Funktion Execute fragt in der Schleife zunächst auf Terminated ab, und beendet sich. Dies geschieht jedoch zeitlich nach dem delete. Verwundert war ich auch darüber, das Execute schon aufgerufen wird, bevor überhaupt der Constructor abgearbeitet ist, wenn mit CreateSuspended = false aufgerufen wird, was ja in diesem Falle notwendig ist. Warum ist schon klar, da schon der Constructor von TThread selbiges macht.
Aber, worüber diskutieren wir hier eigentlich? :p
-
Das delete schlägt einzig und allein deswegen fehl, weil der Thread mit FreeOnTerminate = true erzeugt wird. Durch das 'Suspenden' verhinderst Du nur, dass der Thread weiter ausgeführt wird und sich selbst freigibt.
-
Die Disukussion um HEZ' "mein Thread beendet nicht" wurde hier her abgetrennt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-105907.html