是这样的,我有一循环任务,但我只开20个线程,每个线程结束后自动去找下一个任务,现在我想通过一个按钮,把所有正在运行的线程都安全结束掉。有可能有这种情况,1-20号的线程,15号最先结束了,那么正在运行的线程号为       1-14 16-20 21我如何做才能一下子把正在运行的线程结束掉,
所有线程都是通过线程类来创建的

解决方案 »

  1.   

    设一个全局标志:bstop:boolean=false;
    线程的循环里每次都判断它要结束,就bstop:=true;
      

  2.   

    受控退出:   
      var   
          MyThread1:TMyThread;   
        
      创建   
          MyThread1:=TMyThread.Create(false);   
      释放   
      MyThread1.Suspend;   
      MyThread1.Free;
      

  3.   

    把线程写成begin
      while (!Terminated) do
      begin
        ....
      end;
    end;的形式。
      

  4.   


    begin
      while (!Terminated) do
      begin
        if(bstop) then
        begin
          self.terminate;
          break;
        end;
        ....
      end;
    end;
      

  5.   

    缺少一个线程管理类,该管理类应该有一个保存线程handle的列表
      

  6.   

    即使不用线程列表,最起码也要一个管理线程来控制工作线程!
    在管理线程的execute中等待Event<其实也就是一个全局的信号量>,当有退出信号时,逐一把线程的terminated:=true来实现安全的等待退出
      

  7.   


    这个方法比较快,在你定义的线程中 共用一个全局变量bstop,
      

  8.   

     while (!Terminated) do  有用的
      

  9.   

    即使不用线程列表,最起码也要一个管理线程来控制工作线程!
    在管理线程的execute中等待Event<其实也就是一个全局的信号量>,当有退出信号时,逐一把线程的terminated:=true来实现安全的等待退出
    -------------------------------------------------------------------------
    我不要等待线程退出,我想要把正在工作的线程数组退出,
      

  10.   

    问题已经解决
    采用的是hunter103的方法