关于主线程获取线程结束相关信息 (c++ builder)

ssfang007 2010-04-13 01:46:26
今天上线看了下,上次可用分押宝成功,竟然多了300多分,呵呵,这里有点小问题。借此机会,现在散点分给大家。

一开始是定义一个变量,在子线程结束前改变变量的值。在主线程中通过这个变量判断子线程是否结束。
后来遇到很多问题。比如,FreeOnTerminate = true时,线程是自动释放资源的。这样的话这个变量的值就不确定了。
所以我索性在子线程结束前将子线程的指针重置为NULL,这样通过子线程的指针判断子线程是否结束了。目前还没遇到什么问题,但不敢肯定以后会有后遗症不?希望高手看看。给点意见。
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCED136 2010-04-14
  • 打赏
  • 举报
回复
如Form1->theard->WaitFor();

方法返回时,线程已结束运行,不过需要注意的是,
此线程的属性 FreeOnTerminate 应该为 false
否则调用此方法会发生无效句柄的错误。
CCED136 2010-04-14
  • 打赏
  • 举报
回复
TThread::WaitFor()
YeBinYe 2010-04-14
  • 打赏
  • 举报
回复
用临界区来标识变量;
判断子线程是否结束可以采用waitfor来进行判断
我不懂电脑 2010-04-13
  • 打赏
  • 举报
回复
设置FreeOnTerminate
在OnTerminate事件里统一处理啊。
柯本 2010-04-13
  • 打赏
  • 举报
回复
方法2应该没问题,另外也可以考虑用会局变量作为标记
ssfang007 2010-04-13
  • 打赏
  • 举报
回复
啊,有人没明白。
我的问题是 如何知道子线程是否结束?
方法1.
在子线程类中增加一个变量用来标识进程是否结束。如isOver 1为结束,
但是,当设置FreeOnTerminate = true时,线程结束将释放内存资源。所以isOver的值就存在不确定性。

方法2.
在子线程结束前将主线程中的线程指针设为NULL,如Form1->theard = NULL (theard 为线程指针)。通过theard是否为NULL判断子线程结束了没。

我觉得方法2好些。不知道大家怎么想的。欢迎讨论。
tsk 2010-04-13
  • 打赏
  • 举报
回复
沙发。。。没太看明白。。。。。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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