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,…)