在主程序里通过全局变量通知工作线程结束线程,那么我在主程序里怎么判断工作线程已经结束了?
解决方案 »
- vs2005编写的程序在vista下试图以管理员身份运行的问题
- vc9 mfc中还有Cstring 这个类么,我怎么在MSDN中找不到了
- 请教个问题~希望有时间的能来帮下忙,非常感谢!
- 我不小心把整个toolbar删除了,然后其他错误就没有,但是运行的时候他就说建立空文档失败,怎么办啊.......
- 如何快速简单的disable整个窗口里的控件,使他们变灰不可用?
- 如果调用InitCommonControlsEx函数?
- 两个文件操作问题?
- 似乎只模拟了1次,谁帮我看看。
- 求救:英文工程中出现的汉字都是乱码,怎么改成中文工程,如何修改.rc文件?
- 如何在一台电脑上调试 tcp 服务端和客户端,另如何设置vm (host-only) 使得主机和虚拟机之间互相通信
- 取系统时间10位,结果只得到两位
- sdk编程中如何实现窗口背景透明,而窗体上的字和其他空间确不受影响的效果??
线程结尾的时候给主程序发SendMessage(pWnd,ID_THREAD_END,0,0);
if( GetExitCodeThread( m_pYourThread->m_hThread, &nExitCode ) )
if( nExitCode != STILL_ACTIVE )
{
delete m_pYourThread
// 工作线程已经结束,处理后续工作
// .....
}这里要注意的是,在创建工作线程时要设置
m_pYourThread->m_bAutoDelete = FALSE ;
否则,线程结束后,m_pYourThread被自动删除,GetExitCodeThread()就得不到正确的返回值。另外要注意的是,上面的这段检测代码不能放在一个循环里不停地查询工作线程是否结束,因为这样导致工作线程得不到时间片来执行,使程序进入死循环。这是我摸索了很长一段时间才搞明白的经验,希望能跟大家共享。
不知道有没有更好的办法,期待中...
在主线程中使用WaitForSingleObject(),比较正确!可以保证线程退出后及时得到通知