已经
mythread:=Tmythread.create(false);
freeonterminate:=false;
要求立即结束线程。
mythread.free或terminate都不行,因为他们要等待线程结束。
打算用API的terminatethread不知行不行?怎么用呢?
请高手指教。
顶者有分。

解决方案 »

  1.   

    .free不行??不会吧~~用.Destroy?
      

  2.   

    调用 TerminateThread 时可能会引起内存泄漏,因为它是用操作系统的功能强制终止,不管线程正在干什么,所以一些资源的释放问题和内核对象的释放问题就有了,ms不推荐使用.如果正常结束要等待的话,可以考虑改变程序的结构,比如不断的监测termited变量是否为真,如果为真则退出.
      

  3.   

    楼上说的对,原来一直不了解, TerminateThread() 会产生资源泄漏
      

  4.   

    要关闭的线程初始化的时候先等待一下,另一个线程在等待期间将它挂起,并保存它的上下文结构(调用GetThreadContext函数)然后恢复执行。到需要关闭的时候,首先挂起它,然后将保存的上下文结构中的指令指针(Eip数据成员)指向清理代码(或者,直接指向ExitThread),最后调用SetThreadContext并恢复运行。这样就能保证释放所有与线程相关的内核和用户态系统资源了。