1

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 に慣れていないので、2 つの質問があります。

- この CreateEvent() の使用は何を返しますか?

-これにより、SleepUntilInput() 関数が正しく動作するようになりますか?

4

1 に答える 1

2

CreateEvent新しく作成されたイベントへのハンドルを返します。

SleepUntilInput`MsgWaitForMultipleObjcts 関数を使用して、次の 3 つのいずれかが発生するまで待機します。

  1. イベントが通知される、または
  2. 入力が利用可能、または
  3. timeミリ秒が経過しました。

コードがイベントを通知することはないため、条件 (1) は発生しません。そのため、(2) または (3) のみがコードを起動します。

イベントは実際には必要ないことに注意してください。コードで実行できた可能性がある

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

しかし、コードを書いた人はそれを考えていなかったので、代わりにダミーのイベントを渡しました。

于 2012-08-16T15:00:24.413 に答える