用TThread类生成一个类,怎样正确关闭

解决方案 »

  1.   

    线程.Suspend;
    线程.Free;
    线程 := nil;或者线程.Terminate
      

  2.   

    是了好多种方法,都好像有问题,甚至导致操作系统Dump。
    楼上的 讲的是一种方法,但是一旦释放就会出错。
    原因是在线程Excute中用:
    while not Terminated do
    begin
      ....
    end;
    采用其他的方式如:
      MyThread.Terminate;
      MyThread.Waifor;
      MyThread.Free; 也不行。没有释放掉线程....
    采用Api函数(TerminateThread(myThread.Handle,0))倒是可以释放掉,但是在重新创建的时候,就会出错...
    真的搞不懂,如何才能够安全的杀掉一个线程,让他把资源都释放出来...而且是安全的...
      

  3.   

    在线程中设置一个WillTerminate:boolean的私有变量,在循环中只是检测WillTerminate是否为true,如果是就terminate。当你要terminate线程的时候,只要设置WillTerminate:=true就可以了
      

  4.   

    tpp=class(tthread)
    procedure Execute;
    end;procedure tpp.Execute;
    begin
    FreeOnTerminate:=true;//-》线程结束将自动释放


    Terminate;//-》结束线程
    end;