Lass doch deinen Code fast einfach, wie er ist:
Delphi-Quellcode:
Procedure TMyThread.Execute;
Begin
while not terminated do
case TriggerEvent.WaitFor(-1) of
wrSignaled : ExecuteTheAction();
wrTimeout,
wrAbandoned : Terminate;
wrError : { Fehler loggen };
end;
end;
procedure TMyThread.RestartExecution;
Begin
TriggerEvent.SetEvent;
end;
Constructor TMyThread.Create;
Begin
...
TriggerEVent := .Create(nil, True, False, nil);
...
(Ungetestet, nur hingetippt)
Erzeuge den Thread. Er macht erst einmal nichts, sondern wartet, bis Du 'RestartExecution' aufgerufen hast.
Dann erledigt er seine Aufgabe und legt sich wieder schlafen.
Alternativ kannst Du dir mal den
Workerthread-Poolanschauen. Dort wird das Konzept eines Threads etwas anders behandelt. Vielleicht ist das was.