返回> 网站首页 

线程与界面线程死锁问题

yoours2012-12-11 14:10:49 阅读 1458

简介一边听听音乐,一边写写文章。

主程序中,创建了一个线程专门更新界面控件显示的数据,在退出时就会导致死锁(除非在退出过程中,没有数据需要更新界面才不会导致死锁问题)。

通常做法:
主线程退出函数中添加如下:
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);
}

微信小程序扫码登陆

文章评论

1458人参与,0条评论