在设计多线程程序的时候.
当关闭程序时,在主窗体的Destroy事件中,检测线程是否正在运行,如果正在运行的话,就Terminate,然后再Free掉
可是,这样,虽然程序窗口关闭了,但在进程中还保留着,一直到线程结束和释放掉,进程才会结束,
如何能将程序关闭的时候,直接线程,进程都结束呢?

解决方案 »

  1.   

    不建议你强制线程结束,这跟你具体地操作有关,如果设置OnTerminated := True,线程会在执行完后自动结束如果线程工作在如下循环中while not Terminated do
    begin
    ......
    end;
    这样,可以代码设置线程的Terminated := True,来使线程不再工作API方法,TerminateThread可以终止线程,试试,是不是你想要的结果
      

  2.   

    我使用的是TThread类,没有使用API函数创建线程!
    在ExeCute中用了While Not Terminate Do
    循环内一直有代码运行,
    又测试了在线程类的构造函数中使用FreeOnterminate:=true;
    和先前效果一样,无法最快速的达到关闭线程及进程的结果.
    如果不在Destroy中加入Terminate和Free的话,能够快速关闭,
    但是在使用检测内存泄漏时会出现提示泄漏!这样的方法应该不可取~~
      

  3.   

    把你的线程放到TThreadList里面进行管理
      

  4.   

    我是将线程放在了Tlist中管理的!
    申请了合局变量
    ThreadList:Tlist;
    加入线程的时候,用了ThreadList.add(Thread[i]);
    在程序退出的时候用了
    TThread(ThreadList[i]).terminate;
    TThread(ThreadList[i]).Free;
    如果线程在运行的时候关闭窗体,程序进程还会存在,并且要等线程全部释放才能正常结束进程
    想快速释放线程关闭进程,但又保证不会出现内存泄漏.不知道如何做