![]() |
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:
Und "Bla" würde dann bei Execute aufgerufen werden...
procedure Kill;
begin Thread.FKill := true; Thread.Suspend; end; procedure TThread.Bla; begin while (not FKill) or (not Suspended) do begin ... end; end; |
Re: Thread abbrechen
Delphi-Quellcode:
Hängt sich nicht aber das Programm durch TThread.Bla auf, wenn darin eine Schleife ausgeführt wird?
procedure Kill;
begin Thread.Terminate; end; procedure TThread.Bla; begin while not Terminated do begin ... end; end; |
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. |
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:
Aber dennoch habe ich die Frage, wie man nach "Suspend", den Thread wieder anschmeißen kann...
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 Wenn das mit Resume geht, dann wäre es nett es zu posten, weil er das nicht tut... |
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.
|
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 ;)
|
Re: Thread abbrechen
Zitat:
|
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! |
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:
Suspenden scheint ja zu klappen aber trotzdem nochmal:
if Thread.Suspended then // nicht im Kontext von "Thread"
begin Thread.Resume end;
Delphi-Quellcode:
Beim Suspenden und Resumen solltes du aber sicherstellen, dass der Thread auch noch ausgeführt wird, da du sonst eine Exception bekommst.
if not Thread.Suspended then // kann im Kontext von Thread sein wobei du dir dann die Abfrage sparen kanst
begin Thread.Suspend; end; |
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. |
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