Eins vorweg:
Ja, mir ist klar dass man mit Thread.Terminate den Thread nett bitten soll sich zu beenden, natürlich in der Thread.Execute auf Terminated prüft und das ganze nach Geschmack mit FreeOnTerminate := false oder true kombiniert und dann eben im Hauptprogramm wenn der Thread sich beendet hat entsprechend Thread.Destroy aufruft oder eben nicht.
Nur – was ist wenn der Thread in einer Enlosschleife festhängt, und von daher an der Stelle in der Thread.Execute wo auf Terminated geprüft wird gar nicht vorbeikommt?
Und weiter angenommen, es wäre für mein Programm besser, einfach den klemmenden Thread neuzustarten als das ganze Programm (was ja nicht so schwierig umzusetzen wäre).
Was ich probiert hab (alles in einer Konsolenanwendung unter Linux):
Code: Alles auswählen
KillThread(Thread.Handle)
Code: Alles auswählen
ThreadManager := GetThreadManager;
ThreadManager.KillThread(Thread.Handle)
Code: Alles auswählen
Thread.Destroy
// bzw.
FreeAndNIL(Thread)
Code: Alles auswählen
RemoveThread
Gruß, Ingo