OpenEventは、イベントを開くWindowsAPI・・・。
今度は、とある処理が行われたら、手動でシグナル状態や非シグナル状態にすることで、同期を取る方法・・・。
イベント名は"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秒後に実行された・・・。