Использование CreateEvent() в Quake

Мне интересно использовать функцию CreateEvent() в Quake.

В файле c есть следующий глобальный объект, в котором определена WinMain ():

static HANDLE tevent;

В самой функции WinMain () мы видим это:

tevent = CreateEvent(NULL, FALSE, FALSE, NULL);

Игра завершается, если это создание не удается.

Затем он появляется в следующей функции:

void SleepUntilInput (int time)
{
    MsgWaitForMultipleObjects (1, &tevent, FALSE, time, QS_ALLINPUT);
}

И, наконец, CloseHandle (tevent) вызывается в функции Quit.

Я не знаком с WinAPI, поэтому у меня остается два вопроса.

-Что возвращает это использование CreateEvent()?

-Как это заставляет функцию SleepUntilInput() работать правильно?

1 ответ

Решение

CreateEvent возвращает дескриптор вновь созданного события.

SleepUntilInput использует функцию `MsgWaitForMultipleObjcts для ожидания, пока не произойдет одно из трех:

  1. Событие сигнализируется, или
  2. Ввод доступен, или
  3. time миллисекунды истекли

Поскольку код никогда не сигнализирует о событии, условие (1) никогда не возникает, поэтому единственное, что его разбудит, это (2) или (3).

Обратите внимание, что событие на самом деле не является необходимым. Код мог бы сделать

void SleepUntilInput (int time) 
{ 
    MsgWaitForMultipleObjects (0, NULL, FALSE, time, QS_ALLINPUT); 
} 

Но тот, кто написал код, об этом не задумывался, поэтому вместо этого он прошел фиктивное событие.

Другие вопросы по тегам