Dein 'StoppBackgroundTask' sollte ein 'ResetEvent' aufrufen und der Thread per 'WaitForSingleObject' prüfen, ob er laufen darf:
Delphi-Quellcode:
Procedure TMyThread.Execute;
Begin
While not Terminated Do
Case WaitForsingleObject (fMyEvent...) Of
WAIT_OBJECT_0 :
ExecuteNextJob;
WAIT_TIMEOUT :
HandleTimeout;
WAIT_ABANDONED :
<Thread wurde beim Warten abgeschossen / beendet>
End;
End;
Procedure TMyThread.PleaseStop;
Begin
fMyEvent.ResetEvent;
End;
Ungetestet, aber so in etwa sollte das funktionieren.