Aber bitte auch nicht SuspendThread nehmen. Ist ja nur der
API Aufruf, der in TThread.Suspend gekapselt wird. Auch
msdn schreibt, dass man SuspendThread nur zum Debuggen nehmen soll. Allerdings steht nirgends etwas darüber, warum man SuspendThread nicht aus dem eigenen Thread heraus aufrufen kann. Dennoch gibt es schönere / andere Methoden:
Delphi-Quellcode:
{ TmyThread }
private
FHaltEvent:TEvent;
//...
procedure TmyThread.Continue;
begin
FHaltEvent.SetEvent;
end;
constructor TmyThread.Create(aSuspended: boolean);
begin
inherited;
FHaltEvent:=TEvent.Create(nil,true,true,'');
end;
destructor TmyThread.Destroy;
begin
FHaltEvent.Free;
inherited;
end;
procedure TmyThread.execute;
begin
while not terminated do
begin
//do something
SuspendIfHalted;
end;
end;
procedure TmyThread.Halt;
begin
FHaltEvent.ResetEvent;
end;
function TmyThread.Halted: boolean;
begin
result:= FHaltEvent.WaitFor(0) <> wrsignaled;
end;
procedure TmyThread.SuspendIfHalted;
begin
FHaltEvent.WaitFor(infinite);
end;
procedure TmyThread.Terminate;
begin
if Halted then FHaltEvent.SetEvent;
inherited;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.