Das Thema ist schon etwas älter aber ich habe es so gelöst:
Code:
constructor TBThread.Create;
begin
inherited Create(true);
FTerminateEvent := CreateEvent(nil, true, False, nil);
end;
destructor TBThread.Destroy;
begin
SetEvent(FTerminateEvent);
CloseHandle(FTerminateEvent);
inherited;
end;
procedure TBThread.Execute;
begin
while not Terminated do
begin
if WaitForSingleObject(FTerminateEvent, fcint) = WAIT_TIMEOUT then
begin
if not Terminated then
DoSomething;
end;
end;
end;
procedure TBThread.TerminatedSet;
begin
inherited;
SetEvent(FTerminateEvent);
end;
fcint ist die Zeit die der Thread warten soll.
Und durch dass Event welches durch die überschriebene Methode TerminatedSet gesetzt wird wird das warten vorzeitig beendet.