如何判断一个可能已经退出的线程是否已退出

OhFish 2008-10-27 07:51:41

CleanupThread()
{
//get handle from thread-list

waitfor...()
//terminate thread

//close thread handle
}

WorkThread()
{
//do something
clear();//tell CleanupThread close thread
return 0
}

UIThread()
{
//create WorkThread then add to thread-list

Sleep(time);
............//do something

//这里如何判断WorkThread已经退出?

}

//请问在UIThread中如何叛断WorkThread已经退出?

//注意,在CleanupThread 调用了CloseHandle(); 所以WaitFor...与GetExitCode..应该都不行吧。
//因为对一个已经被关闭了的handle操作,就如同对已经delete的 pointer操作一样,结果是未知的

//我所想到的办法就是 设一全局变量bWrokThreadExit. 在WorkThread退出的地方加bWrokThreadExit= TRUE
//但我觉得这是个不好的办法。一两个线程情况下这个办法可以用用,但如果我有很多线程呢?
...全文
572 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dadalan 2008-10-27
  • 打赏
  • 举报
回复
可以在线程退出的地方用布尔变量做标记
OhFish 2008-10-27
  • 打赏
  • 举报
回复
问题我已想明白,谢谢两位参与。
sys0004 2008-10-27
  • 打赏
  • 举报
回复
BOOL GetExitCodeThread(
HANDLE hThread,
LPDWORD lpExitCode
);


DWORD dwExitCode = 0;
if (GetExitCodeThread(hThread, &dwExitCode) && (STILL_ACTIVE != dwExitCode)
{
// .....
}
OhFish 2008-10-27
  • 打赏
  • 举报
回复
不行吧,
  • 打赏
  • 举报
回复
WaitForSingleObject
第一个参数填写线程的句柄,

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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