程式除了主程式外,会开几个thread同步进行操作
我想在 thread 里再开子thread如何控制必须子thread 执行完了再关闭 上一层thread

解决方案 »

  1.   

    运行到
    thread.waitfor;
    的时候报 thread error:控制码无效这是怎么回事?
      

  2.   

    线程有没设置FreeOnTerminate = true?
      

  3.   

    如果要进行WaitFor就不能设置为true
      

  4.   

    Thread.Terminate();   
    Thread.WaitFor();这样对么?我编译的时候怎么 execute没有执行就退出了?只写Thread.WaitFor(); 的话上一层thread 退出的时候就会出错搞不懂到底要怎样写,还请大家多指教
      

  5.   

    //一直都没有说明你的业务背景,也没有说清楚你的线程工作方式
    //如果按照一个主线程先生成一个主管理线程,而后使主管理线程衍生其它子线程的话,可按照下述方法处理,若假设不成立,请略过!
    //不用主线程做管理线程而另开辟一个线程做管理线程的目的是为了避免堵塞主线程,从而造成服务程序或其它程序启动失败!
     TManagementThread = class(TThread)
       private
        //私有变量
         procedure DispatchRequest;//有工作时,可通过该过程来进行分发任务,近而衍生其它子线程
         procedure CreateJobThread;
       protected
        procedure Execute; override;
       public
        constructor Create(CreateSuspended: Boolean);
        destructor Destroy; override;
      end;
    constructor TManagementThread.Create(CreateSuspended: Boolean);
    begin
      inherited Create(createSuspended);
    end;
    procedure TManagementThread.Execute;
    begin
        DispatchRequest;
    end;
    procedure TManagementThread.DispatchRequest;
    begin
        CreateJobThread
    end;
    procedure TManagementThread.CreateJobThread;
    var
      thdCPSE:  TThdJob ;
    begin
      thdCPSE := TThdJob .Create(TRUE);
      thdCPSE.FreeOnTerminate := TRUE;//可以使该工作线程在工作完毕后自动terminate,不用人工干预,当然,这还要看你的业务需求
      thdCPSE.Resume;
    end;
    //工作线程,自已实现一下
    TThdJob = class(TThread)
      private
      protected
        procedure Execute; override;
      public
        constructor Create(CreateSuspended: Boolean);
      end;