确定线程是否已退出

时间:2012-09-19 22:06:55

标签: c++ mfc

我使用AfxBeginThread创建新主题。我已经尝试使用AfxExitThread退出线程并返回一个值。这两个都应该是退出线程的有效方法。

然而,在拨打GetExitCodeThread电话时,即使在几个小时后我也会STILL_ACTIVE。此外,使用(WaitForSingleObject(ahtRespondThreads[i], 0) == WAIT_OBJECT_0)时,表明线程对象仍然有效。

你怎么知道线程是否真的退出了?是的我知道我可以在函数退出之前设置一些变量,但我认为我应该能够查询线程句柄,知道它已经退出或者不再是一个有效的线程。

2 个答案:

答案 0 :(得分:3)

GetExitCodeThread()WaitForSingleObject()不说谎,所以如果两个人都说线程仍处于活动状态,那么线程仍然处于活动状态,并且尚未退出其控制功能。检查函数中的错误,确保它在您期望它时真正存在。

答案 1 :(得分:0)

这两种方法都应该正常工作,我建议您检查一下您可能错过的任何错误的代码,我还会遇到另一篇文章here,它可能会帮助您。

注意事项:

我知道结束线程的最佳方法是确保线程无法无限期地休眠。当它完成任务后,它会检查一个变量。这将告诉它是否应该退出。

  1. 设置标志
  2. 如果睡着了唤醒线程
  3. 检查工作是否完整
  4. 清理资源
  5. 出口