我正在尝试使用CEvent
让我的线程等到消息队列按照MSDN's advice准备就绪,以便我的PostThreadMessage
函数能够正常工作。
BOOL MFC_Thread::InitInstance(){
BOOL worked=CWinThread::InitInstance();
MSG msg;
BOOL result=PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
fingerveinControllerThreadReady->SetEvent();//Breakpoint 1
return TRUE;
}
void init(){
controllerThreadReady=new CEvent(FALSE, FALSE);
CWinThread* thread=AfxBeginThread(RUNTIME_CLASS(MFC_Thread));
controllerThread=thread->m_nThreadID;
WaitForSingleObject(controllerThreadReady, INFINITE);
DoSomething();//Breakpoint 2
}
不幸的是,似乎WaitForSingleObject
没有做好自己的工作。有时首先击中断点1,有时击中断点2.当首先击中断点2时,我会收到原因为WAIT_FAILED
的{{1}}。为什么会这样?
答案 0 :(得分:3)
这可能是因为你传递了CEvent
对象而不是它的句柄。
试试这个:
WaitForSingleObject(controllerThreadReady.m_hObject, INFINITE);