У меня есть эта функция потока ниже, которая просто ожидает два объекта ядра, чтобы получить сигнал.
Функция ожидания всегда возвращает WAIT_FAILED
с error code 5 (access denied)
и Iне могу сказать почему.
unsigned __stdcall func(void * p_this){
ReceiverThread * ThisObj = (ReceiverThread *)p_this;
HANDLE ClientsMutex = ClientsInterface::GetClientsMutex();
HANDLE WaitFor[2];
WaitFor[0] = ThisObj->PassiveEvent;
WaitFor[1] = ClientsMutex;
res = WaitForMultipleObjects(2, WaitFor, TRUE, INFINITE);
switch (res)
{
case WAIT_OBJECT_0: // both signal
if(!Clients->empty()){
dosomthing();
ReleaseMutex(ClientsMutex);
ResetEvent(WaitFor[0]);
}
break;
case WAIT_ABANDONED_0:
MessageBox(NULL, "WAIT_ABANDONED", "WAIT ERR", MB_OK);
break;
case WAIT_TIMEOUT:
MessageBox(NULL, "TimeOut !", "WAIT ERR", MB_OK);
break;
case WAIT_FAILED:
MessageBox(NULL, "Function Failure !", to_string(GetLastError()).c_str() , MB_OK);
break;
}
}
Инициализация события выглядит следующим образом:
PassiveEvent = CreateEvent(
NULL,
TRUE, // ResetEvent is required to set the event to non-signal state.
FALSE, // non-signaled initial state.
NULL
);
Инициализация мьютекса выглядит следующим образом:
Mutex = CreateMutex(NULL, FALSE, NULL);
Я знаю, что этонемного непрозрачно, но это вся информация, может быть, мне не хватает чего-то ясного, но я не могу понять, почему WaitForMultipleObjects()
get access denied
.есть идеи?