gpt4 book ai didi

c - 在 Quake 中使用 CreateEvent()

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:00 26 4
gpt4 key购买 nike

我很好奇在 Quake 中使用 CreateEvent() 函数。

我们在 WinMain() 定义的 c 文件中有以下全局变量:

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() 函数正常工作?

最佳答案

CreateEvent 返回新创建事件的句柄。

SleepUntilInput 使用 `MsgWaitForMultipleObjcts 函数等待三种情况之一发生:

  1. 事件已发出信号,或者
  2. 输入可用,或者
  3. time 毫秒已经过去。

由于代码从不发出事件信号,条件 (1) 永远不会发生,所以唯一能唤醒它的是 (2) 或 (3)。

请注意,该事件实际上并不是必需的。代码本来可以做的

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

但是写代码的人没有想到这一点,所以他们转而传递了一个虚拟事件。

关于c - 在 Quake 中使用 CreateEvent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com