Self Suspending a thread in Delphi when it's not needed and safely resuming

前端 未结 3 1656
萌比男神i
萌比男神i 2020-12-19 05:20

This question involves Delphi and XE specifically deprecating Suspend and Resume. I have read other posts and I have not found a similar usage so far, so I’m going to go ahe

3条回答
  •  醉酒成梦
    2020-12-19 05:58

    I'd recommend the following implementation of TthrdQueue:

    type
      TthrdQueue = class(TThread)
      private
        FEvent: THandle;
      protected
        procedure Execute; override;
      public
        procedure MyResume;
      end;
    
    implementation
    
    procedure TthrdQueue.MyResume;
    begin
      SetEvent(FEvent);
    end;
    
    procedure TthrdQueue.Execute;
    begin
      FEvent:= CreateEvent(nil,
                           False,    // auto reset
                           False,    // initial state = not signaled
                           nil);
      FreeOnTerminate := true;
      try
        while not Terminated do begin
          if not Queue.Empty then begin
            Obj :=  Pop();
            MyProcess(Obj);  //Do work
            Obj.Ready := true;
          end
          else
            WaitForSingleObject(FEvent, INFINITE);  // No more Work
        end;
      finally
        CloseHandle(FEvent);
      end;
    end;
    

提交回复
热议问题