WaitForMultipleObjects с мьютексом и событием

Если у меня есть следующий код C ++ (для Windows Os):

HANDLE hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
HANDLE hMutex = ::CreateMutex(NULL, FALSE, NULL);

HANDLE hHandles[] = {
hEvent,
hMutex
};

DWORD dwR = ::WaitForMultipleObjects(2, hHandles, FALSE, INFINITE) - WAIT_OBJECT_0;

//if dwR == 0, what state is hMutex in?
//Or, do I need to call ReleaseMutex(hMutex) in that case?

Я не уверен, как справиться с этой ситуацией в отношении мьютекса.

1

Решение

dwR не совсем ноль, это WAIT_OBJECT_0 + 0То есть ваше ожидание было удовлетворено по первой предоставленной ручке. Это дескриптор события, поэтому вам не нужно прикасаться к своему мьютексу.

Если результат WAIT_OBJECT_0 + 1 тогда это была мьютексная ручка, используемая, чтобы преуспеть в ожидании. И как только вы закончите с тем, что вам нужно сделать, вы освобождаете право собственности по телефону ReleaseMutex,

4

Другие решения

Функция работает как метод WaitForSingleObject для мьютексов. Есть пример в MSDN (Пример MSDN), который иллюстрирует получение Mutex с WaitForSingleObject. WaitForMultipleObjects имеет такое же поведение при использовании Mutex.

0

По вопросам рекламы [email protected]