博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】线程正确的退出等待方式
阅读量:7222 次
发布时间:2019-06-29

本文共 601 字,大约阅读时间需要 2 分钟。

一个线程如果退出时,我们习惯写下如下代码:

AThread.Terminate;...AThread.WaitFor;AThread.Free;

但在DLL中调用会在WaitFor的地方出现死等的现象,线程无法退出。

改为下面的代码可以解决:

AThread.Suspended:=False;//线程如果没运行强制运行while not AThread.Started do//线程如果没有处于已启动状态,等待它启动完成    Sleep(10);AThread.Terminate;//通知线程结束//等待线程退出while not AThread.Finished do    Sleep(10);//释放线程对象AThread.Free;

对于Delphi早期版本,TThread的Finished属性并没有公开,此时,我们需要一些非常手段来处理下。

如Delphi 2007,我们通过跟踪,可知道其FFinished的原始地址为Integer(Self)+16,即可以如此判断:

PBoolean(Integer(AThread)+16)^

 

原文地址:http://hi.baidu.com/chineseswish/item/c002afdd81a3b3b232db9046

 

转载于:https://www.cnblogs.com/yangyxd/articles/3930937.html

你可能感兴趣的文章
js 浏览器滑动页面滚动条时,获取元素距离浏览器顶部距离,并且固定浮动导航...
查看>>
iphone Three20如何添加到工程,以及如何添加删除图片的按钮。
查看>>
PHP json_decode返回null解析失败原因
查看>>
SpringMVC与Struts2的对比
查看>>
Java_eclipse软件与git配合使用创建git仓库
查看>>
极路由饥饿营销引质疑 联合创始人拿数据正面回应
查看>>
配置visual studio code for Mac 调试c/c++
查看>>
9、android开发之java.lang.verifyError(转载)
查看>>
创造特殊的构造函数——寄生构造函数模式
查看>>
[笔记]使用clearfix清除浮动
查看>>
postgres常用命令
查看>>
Hive metastore三种配置方式
查看>>
20172304 2017-2018-2 《程序设计与数据结构》第四周学习总结
查看>>
设置fedoral 6 IP一烦事
查看>>
Myeclipse自动生成注释
查看>>
事件的独立和事件互不相容两个概念的区别
查看>>
软件工程——1概述
查看>>
asp.net core不通过构造方法从容器中获取对象及解决通过这种方法NLog获取对象失败的问题...
查看>>
官方2013年6月CISA考试报名时间公布
查看>>
前端实现搜索记录功能-技术分析
查看>>