创建一个Thread后,Execute方法能否多次执行呢?(不希望反复创建线程)例如:  FreeOnTerminate := False;  procedure TReconThread.Execute;
  begin
    inherited;    while not Terminated do
    begin
      //do something
    end;
    Suspend();
  end;  我做了测试,第一次执行Execute后,再次Resume,是不会执行Execute方法的。  是我写得不对,还是本身就不支持这种做法呢?  分不多了,见谅!

解决方案 »

  1.   

    我会在主程序上通过一些操作来反复Resume、Suspend线程。二楼,你是建议这样写吧?    while not Terminated do
        begin
         
          //do something finish      Suspend();
        end;   
        
      

  2.   

        while not Terminated do
        begin
         
          //do something finish
          if not Terminated then//最好还加上这句 
            Suspend();
        end;
      

  3.   

    这样是否更好?    while not Terminated do
        begin
          Finished := False;
          DoMyWork();      if (not Terminated) and Finished then Suspend();
        end;   procedure DoMyWork()
       begin
         //do it 
         Finished := True;
       end;
      

  4.   

    Finished好像没有必要了吧
      

  5.   

    楼主对execute的理解错误,首先execute是thread的一个方法,thread<> winthread可以这么说吧,
    execute是线程的执行体,具体的你可以看vcl中关于thread类及ThreadProc就明白了,而线程启动后就进入execute执行,当前是不会二次进入的。你suspend只是让线程不再获取时间片。