Mfc WaitForSingleObject返回等待失败,因为句柄无效
我正在尝试使用Mfc WaitForSingleObject返回等待失败,因为句柄无效,mfc,Mfc,我正在尝试使用CEvent使线程等待消息队列按照准备就绪,以便我的PostThreadMessage功能正常工作 BOOL MFC_Thread::InitInstance(){ BOOL worked=CWinThread::InitInstance(); MSG msg; BOOL result=PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); fingerveinControllerThreadReady->
CEvent
使线程等待消息队列按照准备就绪,以便我的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时,我收到等待\u失败
,原因是错误\u无效\u句柄
。为什么会发生这种情况?这可能是因为您传递的是CEvent
对象,而不是它的句柄
试试这个:
WaitForSingleObject(controllerThreadReady.m_hObject,无限)代码>我正在使用:这不是得到操作员的控制吗?好的,我尝试了你的建议,现在似乎奏效了。你知道操作符的作用是什么吗?你没有使用操作符句柄:你是用CEvent*作为第一个参数调用WaitForSingleObject。因为HANDLE是void*的typedef,所以接受它,并且调用试图将CEvent*解释为句柄。要使用该运算符,需要类似WaitForSingleObject((句柄)*controllerThreadReady,…)