我打算在程序运行时同时运行一个辅助线程,用来处理主线程发给它的各种任务.在程序启动时我就同时构造了这个辅助线程,请问这个线程构造好后如何等待主线程发给它的任务呢?我在辅助线程里加了一个style属性用来记录任务类型,一个executed属性用来判断该任务是否被执行过。也就是说有任务的话,主线程就把这个属性设置能false,辅助线程就不停的判断executed是否为false,如果是,就执行线程execute,如果不是就继续挂起。如何才能让线程在不消耗太多资源的情况下不停的判断呢?我在execute过程里用while true do,虽然实现了但是我担心这样很消耗资源?是否有什么现成的属性设置呢?初学线程,请大家指教。

解决方案 »

  1.   

    补充一下:我在程序中使用Resume方法似乎也没用,由于发贴较急,分数忘了改了,解决问题另外送分.
      

  2.   

    我刚才用了如下方法,好像不是很占资源了,是否还有更直接的实现办法呢?希望高手指教.
    使用while true do语句让线程永久循环执行,然后在执行完一次while以后调用Suspend方法挂起,当用到该线程时再使用resume方法恢复循环.
      

  3.   

    while not terminated do
    begin
      Suspend;
      if Terminated then Exit;
      DoAction;
    end;
      

  4.   

    主要线发送任务就写上
    var
      newWorker: TWorker;
    begin
      ...
      newWorker := new TWorker;
      newWorker.* := *;//配置任务内容
      thread.Worker := newWorker;//这里需要先判断线程前一任务是否已经完成
      thread.Resume;
      ..
    end;
      

  5.   

    用信号量来实现,参考以下命令var
      Hand:THandle;
    Hand:=CreateEvent(nil,True,False,nil);SetEvent(Hand); WaitForSingleObject(Hand,1000); CloseHandle(Hand);