delphi 多线程问题

weizhixun 2010-09-11 03:02:02
问题1:请问如何在创建线程过程退出该线程()?
问题2: 调用Terminated 是退出该线程了吗并释放了内存(FreeOnTerminate=true)?
问题3: onterminated 中的代码什么时候初执行?
...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beiguofengguang 2010-09-19
  • 打赏
  • 举报
回复
看看,楼上的说的很好
qxq321 2010-09-19
  • 打赏
  • 举报
回复
SQLDebug_Fan讲的很对。
weizhixun 2010-09-19
  • 打赏
  • 举报
回复
谢谢了,
SQLDebug_Fan 2010-09-14
  • 打赏
  • 举报
回复
onterminated是线程结束时执行的函数,而且函数在主线程中执行。

调用Terminated 是退出该线程了吗并释放了内存(FreeOnTerminate=true)? 这个需要你的线程执行函数检测是否Terminated为Ture,如果为True,你应退出Execute函数,这时如果把FreeOnTerminate=true,线程就会自动释放,这个办法有个缺陷是:线程对象TThread是在主线程中申请的,但是却在分线程释放,FastMM会报内存异常,所以建议在OnTerminated中释放。
lhs203203 2010-09-13
  • 打赏
  • 举报
回复
楼主是在看创建线程需要多长时间么?
贝隆 2010-09-11
  • 打赏
  • 举报
回复
一边创建,一边退出?有些晕
milunhailili 2010-09-11
  • 打赏
  • 举报
回复

问题1:
我想不到什么情况下会一边创建,一边退出。

问题2:
是否自动释放内存要看你的 FreeOnTerminate 的设置。
Thread.Terminate 只是设置线程的一个成员为True。至于退出,我觉得需要你为线程指定OnTernimate方法,并在OnTernimate中设置该变量为True。像这样:
procedure DoTernimate(Sender: TObject);
begin
//其它需要处理的方法
Finished := True;
end;

需要结束时
if not Thread.Suspended then
Thread.Resume;
Thread.Ternimate;
while not Finished do
Application.ProcessMessages;

这是我使用的方法。

你可以看看源码就知道了。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧