Ond*_* C. 4 delphi multithreading vcl delphi-6
我有多线程应用程序,当应用程序结束时我遇到了一些问题:我可以通过TThread.Terminate在Form1.OnDestroy事件处理程序中调用方法来正确终止线程,但终止确实需要一些时间,因此我无法释放内存(通过TThread.Free方法).不幸的是,由于某些其他原因,我必须将TThread.FreeOnTerminate属性设置为false,因此线程终止后线程对象不会自动销毁.
我的问题可能有点傻了,我很久以前就已经知道了,但是这样就可以了,线程会被自动销毁(因为应用程序刚刚结束),或者它是一个问题而内存会"丢失" ?非常感谢您的解释.
在开始关闭应用程序的其余部分之前,您应该等待线程终止,否则共享资源可能会在线程脚下释放,可能导致一系列访问冲突.等待线程终止后,您可以释放它.事实上,这就是TThread析构函数为您所做的事情.
如果没有共享资源,那么确定,让它自己死掉.即使线程在主线程之后终止,所需要的只是所有线程退出以使程序终止.与线程对象关联的任何内存都将被清除,并将其与其他所有内容一起返回给操作系统.
但是,小心!如果您的线程需要一段时间才能退出,那么可能会导致僵尸进程在没有GUI的情况下在那里停留.这就是为什么它是非常检查的重要Terminated标志非常往往在线程循环,并退出线程.
N - [
| 归档时间: |
|
| 查看次数: |
2757 次 |
| 最近记录: |