WaitForSingleObject возвращает ожидание не удалось из-за неверного дескриптора - PullRequest
1 голос
/ 14 февраля 2011

Я пытаюсь использовать CEvent, чтобы заставить мой поток ждать, пока очередь сообщений не будет готова в соответствии с рекомендацией MSDN , чтобы моя 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 с причиной ERROR_INVALID_HANDLE.Почему это происходит?

1 Ответ

3 голосов
/ 14 февраля 2011

Это может быть потому, что вы передаете объект CEvent вместо его дескриптора.

Попробуйте это:

WaitForSingleObject(controllerThreadReady.m_hObject, INFINITE);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...