{
ResetEvent(g_hEvent);
WaitForSingleObject(g_hEvent,INFINITE);
}
用户界面线程为:
LRESULTOnTest(WPARAMwParam,LPARAMlParam)
{
...//处理
SetEvent(g_hEvent);
return0L;
}
------Solutions------
补充:
主线程为:
{
ResetEvent(g_hEvent);
PostThreadMessage(nUIThreadID,WM_TEST,0,0);
WaitForSingleObject(g_hEvent,INFINITE);
}
------Solutions------
lovelypengpeng(鹏鹏)punpuny()程序都没错。
lovelypengpeng(鹏鹏)检查一下消息收到了没有,检查一下wParam的值是否和postmessage的值相同!
检查setEvent的返回值。
奇怪?gz
------Solutions------
这样:
if(::WaitForSingleObject(g_eventKill,0)==WAIT_OECT_0)
{
return(0);
}
.............
------Solutions------
我试过了很多方法,包括把用户界面放到主线程里,把费时程序放到子线程里,可是只要一调用WaitForSingleObject,这个程序就会阻塞住,很奇怪。
------Solutions------
用户界面线程没有受到消息,不知道是怎么回事?
------Solutions------
不要调用WaitForSingleObject,而是通过发消息来进行线程之间的通信吧.
用WaitForSingleObject是肯定要阻塞主线程的.
------Solutions------
可是WaitForSingleObject不应该阻塞用户界面线程啊,因为这是两个不同的线程
------Solutions------
可以试试MsgWaitForMultiplyObjects,可以处理消息的,不过控制稍微复杂些。
------Solutions------
gz
------Solutions------
使用MsgWaitForMultipleObjects代替WaitForSingleObject
主线程为:
{
ResetEvent(m_hEvent);
PostThreadMessage(nUIThreadID,WM_TEST,(WPARAM)m_hEvent,0);
//WaitForSingleObject(m_hEvent,INFINITE);改为
WaitMyEvent(m_hEvent);
}
用户界面线程为:
LRESULTOnTest(WPARAMwParam,LPARAMlParam)
{
...//处理
SetEvent((HANDLE)wParam);
return0L;
}
BOOLWaitMyEvent(HANDLEhObject)
{
//ThemessagelooplastsuntilwegetaWM_QUITmessage,
//uponwhichweshallreturnfromthefunction.
while(TRUE)
{
DWORDresult;
MSGmsg;
//Readallofthemessagesinthisnextloop,
//removingeachmessageaswereadit.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23463-2.html