Also ich mach das mit einer Semaphore und einer CS.
Delphi-Quellcode:
Procedure TMyThread.Add(aSomething : TData);
Begin
FCS.Enter;
Try
Queue.Enqueue(aSomething);
ReleaseSemaphore(FSemaphore,1,nil);
Finally
FCS.Leave
End
End;
Function TMyThread.GetNextData : TData;
Begin
FCS.Enter;
Try
If Queue.Count>0 then
Result := Nil
else
Result := Queue.Dequeue;
Finally
FCS.Leave;
End;
End;
Procedure TMyThread.Execute;
Begin
While not Terminated do
If WaitForSingleObject(FSemaphore,INFINITE)=WAIT_OBJECT_0 then
DoWhatever(GetNextData);
end;
Ich sträube mich, einen Thread mit Sleep(1) im Kreis rennen zu lassen.