読者です 読者をやめる 読者になる 読者になる

OpenEvent

OpenEventは、イベントを開くWindowsAPI・・・。

OpenEvent 関数

今度は、とある処理が行われたら、手動でシグナル状態や非シグナル状態にすることで、同期を取る方法・・・。

イベント名は"Event"とする・・・。

手動で非シグナル状態に戻すので、イベントを作成するCreateEventでは、第2引数はTRUE、第3引数の初期状態は非シグナル状態のFALSE・・・。

0番スレッドを作成したら、イベントをSetEventでシグナル状態にして、スレッドが終わるまで待つ・・・。

OpenEventでイベントを開いてチェックしても、シグナル状態なのでThreadProcのfor文は実行される・・・。
WaitForSingleObjectで待たされることはない・・・。そのあと、すぐに非シグナル状態に手動(つまりResetEvent)でしておく・・・。

1番スレッドは1秒待ってからシグナル状態にする・・・。
すると、ThreadProc内のWaitForSingleObjectで1秒待つことになる・・・。

2番スレッドは2秒、3番スレッドは3秒、4番スレッドは4秒待ってから、イベント状態にしている・・・。
このように、任意のタイミングでイベント状態にできる・・・。

i = 1, m_iNo = 0, m_tszMessage = No.0
i = 2, m_iNo = 0, m_tszMessage = No.0
i = 3, m_iNo = 0, m_tszMessage = No.0
i = 4, m_iNo = 0, m_tszMessage = No.0
i = 5, m_iNo = 0, m_tszMessage = No.0
i = 1, m_iNo = 1, m_tszMessage = No.1
i = 2, m_iNo = 1, m_tszMessage = No.1
i = 3, m_iNo = 1, m_tszMessage = No.1
i = 4, m_iNo = 1, m_tszMessage = No.1
i = 5, m_iNo = 1, m_tszMessage = No.1
i = 1, m_iNo = 2, m_tszMessage = No.2
i = 2, m_iNo = 2, m_tszMessage = No.2
i = 3, m_iNo = 2, m_tszMessage = No.2
i = 4, m_iNo = 2, m_tszMessage = No.2
i = 5, m_iNo = 2, m_tszMessage = No.2
i = 1, m_iNo = 3, m_tszMessage = No.3
i = 2, m_iNo = 3, m_tszMessage = No.3
i = 3, m_iNo = 3, m_tszMessage = No.3
i = 4, m_iNo = 3, m_tszMessage = No.3
i = 5, m_iNo = 3, m_tszMessage = No.3
i = 1, m_iNo = 4, m_tszMessage = No.4
i = 2, m_iNo = 4, m_tszMessage = No.4
i = 3, m_iNo = 4, m_tszMessage = No.4
i = 4, m_iNo = 4, m_tszMessage = No.4
i = 5, m_iNo = 4, m_tszMessage = No.4
dwExitCode[0] = 0
dwExitCode[1] = 1
dwExitCode[2] = 2
dwExitCode[3] = 3
dwExitCode[4] = 4
続行するには何かキーを押してください . . .

0番は待ち時間なしですぐに実行され、1番は0番が終ってから1秒後に実行、2番は1番が終ってから2秒後、3番は2番が終ってから3秒後、4番は3番が終ってから4秒後に実行された・・・。

Sample/OpenEvent.cpp at master · bg1bgst333/Sample · GitHub