返回> 网站首页
线程与界面线程死锁问题
yoours2012-12-11 14:10:49
简介一边听听音乐,一边写写文章。
主程序中,创建了一个线程专门更新界面控件显示的数据,在退出时就会导致死锁(除非在退出过程中,没有数据需要更新界面才不会导致死锁问题)。
通常做法:
主线程退出函数中添加如下:
m_bStop = true;
if (m_hRecvThread != NULL)
{
WaitForSingleObject(m_hRecvThread->m_hThread, INFINITE);// 这里导致死锁
m_hRecvThread = NULL;
}
界面线程与自己创建的更新界面数据线程死锁,导致无法退出程序。
解决:
方法一:
if (dwResult != 0)
{
while (WaitForSingleObject(m_hThread, 0) != WAIT_OBJECT_0)
{
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (!AfxGetThread()->PumpMessage()
break;
}
}
}
方法二:
while(m_hRecvThread != NULL)
{
DWORD result = MsgWaitForMultipleObjects(1, &m_hRecvThread->m_hThread, FALSE, INFINITE, QS_ALLINPUT);
if (result == WAIT_OBJECT_0)
{
m_hRecvThread = NULL;
break;
}else{
MSG msg;
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
DispatchMessage(&msg);
}
}
文章评论
1703人参与,0条评论