返回> 网站首页 

UI线程与工作线程在退出时死锁的解决办法之一

yoours2011-11-21 11:19:20 阅读 1221

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

在 OnDestroy里死锁,解决办法:
bool v_bWait = true;
while(v_bWait)
{
DWORD dwEvt = MsgWaitForMultipleObjects(1, &m_pThread->m_hThread, FALSE, 1000 * 60, QS_ALLINPUT);
switch (dwEvt)
{
case WAIT_OBJECT_0:
v_bWait = false;
break;

case WAIT_OBJECT_0 + 1:
{
MSG msg;
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
TranslateMessage(&msg);
DispatchMessage(&msg);
break;
}

default: // WAIT_TIMEOUT WAIT_FAILED
v_bWait = false;
break;
}
}

附原则操作函数一个
while(1 != InterlockedExchange(&getout, 0))
{
//...
}

// 在UI线程中设置如下,使线程中的循环(如上)退出。
InterlockedExchange((&getout, 1)

微信小程序扫码登陆

文章评论

1221人参与,0条评论