用WaitForSingleObject来等待线程退出的问题
时间:2011-12-02
来源:互联网
在OnInitDialog里调用下面的代码创建一个线程
C/C++ code
在OnClose里调用下面的代码等待线程退出
C/C++ code
现在的问题是,概率性出现程序一直卡在WaitForSingleObject调用处的情况,此时线程已经结束了,为什么会出现这种情况。
C/C++ code
CWinThread *pThread = AfxBeginThread(ThreadFunc, (LPVOID)&m_strFilePath, 0, CREATE_SUSPENDED); m_hThread = pThread->m_hThread; //m_hThread是成员变量 pThread->ResumeThread(); TRACE(_T("OnInit, %x\n"), m_hThread);
在OnClose里调用下面的代码等待线程退出
C/C++ code
TRACE(_T("OnClose, %x\n"), m_hThread); DWORD dRes = WaitForSingleObject(m_hThread, INFINITE);//概率性卡在这里,此时线程已退出 ASSERT(WAIT_OBJECT_0 == dRes || WAIT_FAILED == dRes);
现在的问题是,概率性出现程序一直卡在WaitForSingleObject调用处的情况,此时线程已经结束了,为什么会出现这种情况。
作者: rcbblgy 发布时间: 2011-12-02
线程函数的部分内容
C/C++ code
在OnClose调用时,确定线程已经退出,m_hThread的值也没有被意外修改。
出现卡住的情况,一般都是文件不存在直接return 0返回的时候。
C/C++ code
UINT CRuleBlockCheck::ThreadFunc( LPVOID lpParam ) { CString& strPath = *(CString*)lpParam; CStdioFile file; if (!file.Open(strPath, CFile::modeReadWrite)) { ::PostMessage(m_hDlgWnd, WM_THREAD_MESSAGE, eOpenFail, NULL); return 0; } //文件存在,其它操作 }
在OnClose调用时,确定线程已经退出,m_hThread的值也没有被意外修改。
出现卡住的情况,一般都是文件不存在直接return 0返回的时候。
作者: rcbblgy 发布时间: 2011-12-02
C/C++ code
CWinThread *pThread = AfxBeginThread(ThreadFunc, (LPVOID)&m_strFilePath, 0, CREATE_SUSPENDED); m_hThread = pThread->m_hThread; //m_hThread是成员变量 pThread->m_bAutoDelete = FALSE; pThread->ResumeThread(); TRACE(_T("OnInit, %x\n"), m_hThread);
作者: mousecarrot 发布时间: 2011-12-02
线程退出了,wait应该直接返回啊
作者: ouyh12345 发布时间: 2011-12-02
我也是这么认为的,但是有时它直接返回,有时就卡在那。
作者: rcbblgy 发布时间: 2011-12-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28