Два WaitForSingleObject в условии if вместо WaitForMultipleObjects

Это правильный способ поставить 2 WaitForSingleObject в условии «если». и я знаю, что это может быть переписано с помощью WaitForMuiltipleObject. Но я хотел знать, не приведу ли я приведенный ниже код к проблемам …?

CHandle     m_hEventUDP;
CHandle     m_hEventTCP;

if (WaitForSingleObject(m_hEventUDP, 1500) == WAIT_OBJECT_0 || WaitForSingleObject(m_hEventTCP, 1500) == WAIT_OBJECT_0)
{
//An event is triggered(among 2)
//I don't care which event is triggered among 2, either of one is Okay for me
}

else
{
//No event is triggered
}

-2

Решение

Это будет ждать первого, и если это не произойдет (и закончится) только тогда, то это будет ждать второго. Вы можете иметь одну из трех ситуаций:

  • Оба тайм-аута. Вы берете 3 секунды и добираетесь до случая «без триггера».
  • Один раз, один запускает. Вы займете 1,5 секунды и доберетесь до «триггерного» дела.
  • Оба запускаются, вы попадаете туда, как только запускается второй.

С WaitForMultipleObjects вы получите следующее поведение:

  • Один срабатывает, вы попадаете туда, как только первый срабатывает.
  • Оба тайм-аута, вы берете 1,5 секунды (или 3, если вы указываете это) и переходите к делу «без триггера».

Таким образом, в вашем текущем коде у вас будет добавлена ​​1,5-секундная задержка в обычных случаях, которых избегают ожидания нескольких объектов.

2

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

Это не будет работать так, как вы хотите (по крайней мере, не очень близко к тому, что WaitForMultipleObjects будет делать, в любом случае). || создает точку последовательности, поэтому он оценивает левую сторону, тогда, если и только если это дает ложный результат, он оценивает правую сторону.

0

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