加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi – 当应用程序退出时,未释放(但已终止)的线程会发生什么

发布时间:2020-12-15 09:41:25 所属栏目:大数据 来源:网络整理
导读:我有多线程应用程序,当应用程序结束时我遇到了一些问题:我可以通过在Form1.OnDestroy事件处理程序中调用TThread.Terminate方法来正确终止线程,但终止确实需要一些时间,因此我无法释放记忆(通过TThread.Free方法). 不幸的是,由于某些其他原因,我必须将TThrea
我有多线程应用程序,当应用程序结束时我遇到了一些问题:我可以通过在Form1.OnDestroy事件处理程序中调用TThread.Terminate方法来正确终止线程,但终止确实需要一些时间,因此我无法释放记忆(通过TThread.Free方法).
不幸的是,由于某些其他原因,我必须将TThread.FreeOnTerminate属性设置为false,因此线程终止后线程对象不会自动销毁.

我的问题可能有点傻了,我很久以前就已经知道了,但是这样就可以了,线程会被自动销毁(因为应用程序刚刚结束),或者它是一个问题,内存会“丢失” ?非常感谢您的解释.

解决方法

在开始关闭应用程序的其余部分之前,您应该等待线程终止,否则共享资源可能会在线程脚下释放,可能导致一系列访问冲突.等待线程终止后,您可以释放它.事实上,这就是TThread析构函数为您所做的事情.

如果没有共享资源,那么确定,让它自己死掉.即使线程在主线程之后终止,所需的只是所有线程退出以使程序终止.与线程对象关联的任何内存都将被清除,并将其与其他所有内容一起返回给操作系统.

不过要小心!如果您的线程需要一段时间才能退出,那么可能会导致僵尸进程在没有GUI的情况下在那里停留.这就是为什么在线程循环中经常检查Terminated标志并退出线程非常重要的原因.

N – [

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读