while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
//Ifit'saquitmessage,we'reoutofhere.
if(msg.message==WM_QUIT)
returnFALSE;
//Otherwise,dispatchthemessage.
DispatchMessage(&msg);
}//EndofPeekMessagewhileloop.
//Waitforanymessagesentorpostedtothisqueue
//orforoneofthepassedhandlesbesettosignaled.
result=MsgWaitForMultipleObjects(1,&m_hEvent,
FALSE,INFINITE,QS_ALLINPUT);
if(result!=WAIT_OECT_0)
continue;
else
returnTRUE;
}
}
------Solutions------
sunbo(),你试过吗?你的代码是从msdn上抄的吧,可是不知道行不行。
------Solutions------
不用Event,试用一下Mutex(互斥体对象)。
------Solutions------
Mutex也试过了,不行。

------Solutions------
tolovelypengpeng(鹏鹏):
在DispatchMessage(&msg);前
少了个TranslateMessage(&msg);
------Solutions------
1、在辅助线程中是否给主线程发送了消息。如有,则主线程在WAITFORSINGLEOECT时不会响应任何消息。
2、如允许,则改造主线程:
voidCMyDlg::CloseThread()
{
if(WaitForSingleObject(m_hKill,30)==WAIT_TIMEOUT){
PostMessage(WM_USER_CLOSETHREAD);
}
}
//WM_USER_CLOSETHREAD消息函数
voidCMyDlg::OnCloseThread(WPARAMwParam,LPARAMlParam)
{
if(WaitForSingleObject(m_hKill,30)==WAIT_TIMEOUT){
PostMessage(WM_USER_CLOSETHREAD);
}
}
------Solutions------
lovelypengpeng(鹏鹏)
应该不会阻塞界面线程,问题可能不是在event,而是你的消息处理上,检查消息是否收到,不行的话先用postmessage试试
punpuny()
你的Event用得很奇怪,但也不应该有问题,你在Waitfor..()之前setEvent一下,看看还阻塞吗?
------Solutions------
punpuny():
试着将m_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL)房到构造函数中。
lovelypengpeng(鹏鹏):
你的问题很奇怪。同意楼上的,“你在Waitfor..()之前setEvent一下,看看还阻塞吗?”
------Solutions------
首先,看不懂你的程序在做什么,SORRY,
其次,我觉得应该用SETEVENT代替RESETEVENT,CREATE完成后应该SETEVENT()一下
最后,将EVENT变量全局化,不要用线程参数来传递。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23463-3.html
是谁