Entwickler-Ecke
Windows API - Thread abbrechen
O'rallY - Sa 10.05.03 13:24
Titel: Thread abbrechen
In einem Thread läuft ein langwieriger Prozess ab. Nun möchte ich dem User die Möglichkeit geben, den Prozess abzubrechen. Mit TThread.Terminate klappts natürlich nicht. Also habe ich mal TerminateThread ausprobiert. Manchmal hats damit geklappt, manchmal ist das Programm einfach abgestürtzt, dies war häufiger der Fall. Also habe ich eine Prozedure in der Thread-Klasse definiert, die so aussieht:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TMyThread.ShutDownThread; var ExitCode: Longword; begin GetExitCodeThread(Handle, ExitCode); ExitThread(ExitCode); end; |
Wenn ich nun aber im Hauptthread diese Methode aufrufe, ist meine Anwedung niergens mehr zu sehen, scheint aber noch zu laufen, da in der IDE der "Play" Button noch gedrückt ist usw.. Welche Möglichkeit habe ich noch, einen einen langen Prozess in einem Thread abzubrechen oder ist die von mir verwendete Methode die richtige, nur mach ich was falsch?
Udontknow - Di 13.05.03 08:05
Hi!
Wieso soll es mit TThread.Terminate nicht funktionieren?
Die Lösung für dein Problem ist, innerhalb des Threads dafür zu sorgen, daß dieser regelmäßig auf Terminated prüft und bei True eben die Prozedur Execute verlässt. Der Befehl Terminate setzt nämlich einfach nur die Boolsche Eigenschaft Terminated auf True, das Beenden muss der Thread dann für sich machen.
Der Sinn dieser Vorgehensweise ist es, daß dem Thread noch die Möglichkeit gegeben wird, kritische Phasen abzuschliessen und belegte Ressourcen freizugeben (wenn du z.B. temporär im Thread Stringlisten erstellst, sollten die auch auf jeden Fall wieder freigegeben werden).
Cu,
Udontknow
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!