Ja und Nein.
Ja, man kann einen Task beenden
Nein einen Sleep kann ich nicht unterbrechen.
Wie unterbreche ich einen Task:
Indem man den Status des aktuellen Tasks abfragt mit
TTask.CurrentTask.Status
Delphi-Quellcode:
procedure Foo;
begin
TTask.Run(
procedure
begin
// nur loslaufen, wenn kein Abbruch
if not TTask.CurrentTask.Status = TTaskStatus.Canceled
then
begin
end;
end );
TTask.Run(
procedure
var
LFinished: Boolean;
begin
// Arbeiten bis Abbruch oder Fertig
while not( TTask.CurrentTask.Status = TTaskStatus.Canceled ) or LFinished do
begin
end;
end );
end;
Das sollte dann auch dein Problem lösen.
Falls es da immer noch Probleme gibt, dann schau dir mal die Fixes für die Threading-
Unit an:
Kuckst du auf SO (Hat mich ein paar graue Haare gekostet)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)