Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread abbrechen (https://www.delphipraxis.net/92092-thread-abbrechen.html)

xZise 14. Mai 2007 14:09


Thread abbrechen
 
Wie kann ich den Thread abbrechen?
Ich habe es schon mit .Suspend versucht und auch mit einer Variable, aber das funktioniert nicht:
Delphi-Quellcode:
procedure Kill;
begin
  Thread.FKill := true;
  Thread.Suspend;
end;

procedure TThread.Bla;
begin
  while (not FKill) or (not Suspended) do
  begin
    ...
  end;
end;
Und "Bla" würde dann bei Execute aufgerufen werden...

richie 14. Mai 2007 14:16

Re: Thread abbrechen
 
Delphi-Quellcode:
procedure Kill;
begin
  Thread.Terminate;
end;

procedure TThread.Bla;
begin
  while not Terminated do
  begin
    ...
  end;
end;
Hängt sich nicht aber das Programm durch TThread.Bla auf, wenn darin eine Schleife ausgeführt wird?

xZise 14. Mai 2007 18:16

Re: Thread abbrechen
 
Ne ^^ Deshalb ist es ja ein Thread und dient nur zum Neuzeichnen ;)
Aber Terminate wäre unpraktisch, weil ich ihn wieder starten ".Resume" möchte.

xZise 14. Mai 2007 18:56

Re: Thread abbrechen
 
OMFG... Entschuldigung für diesen Ausdruck, aber das war einfach nur... öhm... Dummheit :wall: :oops:
Es ist logisch, dass er nich abbricht, weil das Codebeispiel oben nicht ganz richtig ist!

Und zwar musste es heißen:
Delphi-Quellcode:
while FActive do
begin
  ...
  for ...
  begin
    if FKill then
      break; <!--- 1. Fehler, er verlässt nur die Schleife
  end;
end;

FActive := true <!--- 2. Fehler: Active ist nicht der zustand einer Checkbox
Aber dennoch habe ich die Frage, wie man nach "Suspend", den Thread wieder anschmeißen kann...
Wenn das mit Resume geht, dann wäre es nett es zu posten, weil er das nicht tut...

Apollonius 14. Mai 2007 19:27

Re: Thread abbrechen
 
Tja, eigentlich sollte es mit resume gehen. Hast du ihn zufällig mehrfach suspended? Dann musst du ihn auch genauso oft resumen.

jfheins 14. Mai 2007 19:28

Re: Thread abbrechen
 
Es geht schon mit Resume; nur natürlich nicht ausm Thread heraus, weil der ja suspended ist. Btw. ist es imho sinnlos, im thread zu prüfen, ob es suspended ist - das sollte immer false geben ;)

richie 14. Mai 2007 20:35

Re: Thread abbrechen
 
Zitat:

Zitat von xZise
Deshalb ist es ja ein Thread

Aber wird nicht nur TThread.Execute als eigenständiger Thread ausgeführt? Das Programm müsste bei Bla doch hängen bleiben? Mich irritiert die while-Schleife :|

xZise 14. Mai 2007 22:09

Re: Thread abbrechen
 
1. Execute ruft "Bla" auf
2. Mit Resume scheints irgendwie nicht zu funktionieren...
Aber vielleicht liegt es auch an den Threadcode... Ich werde den morgen mal onlinestellen!

C.Schoch 14. Mai 2007 22:36

Re: Thread abbrechen
 
Hi,
Du kannst den Thread sich nicht selbst Resumen lassen, da er ja Suspended ist und somit keine Code ausführt,das heist du musst den Thread aus einem anderen Thread Resumen.

z.B. so:

Delphi-Quellcode:
if Thread.Suspended then // nicht im Kontext von "Thread"
begin
  Thread.Resume
end;
Suspenden scheint ja zu klappen aber trotzdem nochmal:
Delphi-Quellcode:
if not Thread.Suspended then // kann im Kontext von Thread sein wobei du dir dann die Abfrage sparen kanst
begin
 Thread.Suspend;
end;
Beim Suspenden und Resumen solltes du aber sicherstellen, dass der Thread auch noch ausgeführt wird, da du sonst eine Exception bekommst.

xZise 15. Mai 2007 13:51

Re: Thread abbrechen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich glaube es ist hier ein bisschen Unverständnis. Aufgrund dessen stelle ich den Code schon mal online.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Seite 1 von 2  1 2      

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