![]() |
Thread vorzeitig beenden
Gutentag,
Ich möchte mein Thread gerne beenden können, d.h. die Operation vorzeitig abbrechen können. Dabei hat mein Thread die Funktion in TMyThrd.Execute
Delphi-Quellcode:
Ich habe es bereits versucht mit, while not terminated do begin
[...]
begin For I:= 1 to param1 do begin //param1 kann manchmal über 100.000 sein, deswegen soll man das abbrechen können [...] end; Destroy; //Wenn fertig, dann wird abgebrochen end; aber es nützt nichts. Der Thread arbeitet immer weiter bis er fertig ist. Auch wenn man die Anwendung beendet, erhält man ein Systemfehler(wenn Thread noch nicht fertig) Hat jemand eine Idee? |
Re: Thread vorzeitig beenden
.Terminate setzt nur ein Bit, welches der Programmierer auswerten muß.
(dieses wird auch in jedem guten Thread-Tutorial gezeigt)
Delphi-Quellcode:
In deinem Fall also:
// in Execute
begin while not Terminated do begin [...] end; end;
Delphi-Quellcode:
begin
FreeOnTerminate := True; // statt Destroy For I := 1 to param1 do begin if Terminated then Break; [...] end; end; Zitat:
Destroy ruft man nicht direkt auf. Dafür gibt es Free und ein Objekt löschen, wärend dieses verwendet wird, ist ebenfalls Unklug. PS: Nach dem Ende von Execute wird noch einiges im Thread erledigt, demnach würdest du mit Destroy dem Threrad sein Objekt (sich selber) unterm Arsch weglöschen, was welches gut enden kann. |
Re: Thread vorzeitig beenden
Zitat:
Hast du denn DeinThread.Terminate; aufgerufen? Wahrscheinlich hast du das gemacht, aber es hört sich genau danach an als hättest du das nicht gemacht, deshalb frage ich lieber mal. ;-) |
Re: Thread vorzeitig beenden
Danke an alle..
@Jaenicke--> Ja klar, habe ich! ^^ Hätte ich im thread schreiben sollen! lol :thumb: Gute Idee mit Break; Thx |
Re: Thread vorzeitig beenden
Dann muss es aber auch mit der while Schleife gehen. Vorausgesetzt die einzelnen Durchläufe dauern nicht zu lange.
Ah, Moment... du hast das doch nicht so gemeint?
Delphi-Quellcode:
So geht es jedenfalls sicher:
while not Terminated do
for i := 1 to param1 do begin ...
Delphi-Quellcode:
Aber hier ist for + Break natürlich auch passend.
i := 1;
while not Terminated do begin ... Inc(i); end; |
Re: Thread vorzeitig beenden
Zitat:
Delphi-Quellcode:
(die andere Abbruchbedingung nicht vergessen)
i := 1;
while (i <= param1) and not Terminated do begin ... Inc(i); end; |
Re: Thread vorzeitig beenden
Man kann ja mal was vergessen. :oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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-2025 by Thomas Breitkreuz