![]() |
"Delphi 7" Thread beenden nicht immer möglich
Liste der Anhänge anzeigen (Anzahl: 1)
Ich kämpfe gerade damit unter Delphi 7 einen Thread sicher zu beenden. Manchmal klappt's, manchmal nicht.
Beendet werden soll im OnFormClose. Ich habe jetzt mehrere Varianten ausprobiert, aber ich lande immer beim gleichen Problem. Es kommt immer die Meldung: Zitat:
Delphi-Quellcode:
Siehe Bild im Anhang.
function ThreadProc(Thread: TThread): integer;
Folgende Varianten habe ich ausprobiert: A:
Delphi-Quellcode:
B:
if ThreadUpdatePanel<>nil then begin
ThreadUpdatePanel.FreeOnTerminate:=False; ThreadUpdatePanel.Terminate; while (True) do begin KillThreadResult:=WaitForSingleObject(ThreadUpdatePanel.Handle, Timeout); if KillThreadResult = WAIT_FAILED then RaiseLastOSError; if KillThreadResult = WAIT_OBJECT_0 then Break; end; end;
Delphi-Quellcode:
C:
if ThreadUpdatePanel<>nil then
begin ThreadUpdatePanel.Terminate; ThreadUpdatePanel.WaitFor; end; Message per PostMessage an Thread und ihn sich selbst beenden lassen. Ich habe es sowohl mit FreeOnTreminate=True als auch mit FreeOnTerminate=False ausporbiert. Ich habe auch mal das Timeout für Variante A auf 5000 MS hochgesetzt, aber die Fehlermeldung kommt sofort. Es macht den Eindruck als würde der Thread beendet. Wenn ich dann die Anwendung über Start fortsetze, erscheint ganz kurz das madExcept-Fenster und dann wird die Anwendung beendet. Irgendwelche Ideen? |
AW: "Delphi 7" Thread beenden nicht immer möglich
Hallo,
wie sieht den die Execute-Methode des Threads aus? Kann es sein, dass der Thread schon nicht mehr existiert wenn Du ihn in onFormClose beenden willst? Die Objektvariable für den Thread muss nicht NIL sein wenn der Thread beendet wurde. Eine andere Möglichkeit wäre, dass der Thread noch auf Bereiche zugreift die nicht mehr existieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz