constructor TMyThread.Create; begin //...normal initialization stuff... mEvent := TEventObject.Create(nil,true,false,''); end;
{the worker thread's execution} procedure TMyThread.Execute; begin repeat mEvent.WaitFor(INFINITE); mEvent.ResetEvent; if (work_to_do) then //...do_some_work... until Terminated; end;
{called from the main thread:} procedure TMyThread.QueueWork(details); begin //...add_work_details... mEvent.SetEvent; end;
procedure TMyThread.Terminate; begin // Base Terminate method (to set Terminated=true) TThread(self).Terminate;
// Signal event to wake up the thread mEvent.SetEvent; end;