我很好奇在Quake中使用CreateEvent()函数。
我们在c文件中有以下定义WinMain()的全局:
static HANDLE tevent;
在WinMain()函数本身中,我们看到了:
tevent = CreateEvent(NULL, FALSE, FALSE, NULL);
如果此创建失败,游戏将退出。
然后出现在以下功能中:
void SleepUntilInput (int time)
{
MsgWaitForMultipleObjects (1, &tevent, FALSE, time, QS_ALLINPUT);
}
最后在Quit函数中调用CloseHandle(tevent)。
我对WinAPI不熟悉,所以这给我留下了两个问题。
- CreateEvent()的这种用途是什么?
- 这是如何使SleepUntilInput()函数正常工作的?
答案 0 :(得分:2)
CreateEvent
返回新创建事件的句柄。
SleepUntilInput
使用`MsgWaitForMultipleObjcts函数等待,直到发生以下三种情况之一:
time
毫秒已过。由于代码从不向事件发出信号,因此条件(1)永远不会发生,所以唤醒它的唯一事情是(2)或(3)。
请注意,事件实际上并不是必需的。代码可以完成
void SleepUntilInput (int time)
{
MsgWaitForMultipleObjects (0, NULL, FALSE, time, QS_ALLINPUT);
}
但是编写代码的人没有想到这一点,所以他们反而传递了一个虚拟事件。