イベント コールバックを使用してバッファー再生を管理する
イベント コールバックを使用するには、 CreateEvent 関数を使用してイベントのハンドルを取得します。 midiOutOpen 関数の呼び出しで、dwFlags パラメーターのCALLBACK_EVENTを指定します。 midiOutPrepareHeader 関数を使用した後、デバイスに MIDI イベントを送信する前に、ResetEvent 関数を呼び出して、CreateEvent によって取得されるイベント ハンドルを指定して、非署名イベントを作成します。 次に、MIDIHDR 構造体の dwFlags メンバーにMHDR_DONE ビットが設定されているかどうかをチェックするループ内で、WaitForSingleObject 関数を使用して、イベント ハンドルとタイムアウト値 INFINITE をパラメーターとして指定します。
イベント コールバックは、関数コールバックを引き起こす可能性のあるものによって設定されます。
イベント コールバックは特定のクローズ通知、完了通知、またはオープン通知を受け取らないので、アプリケーションはイベントが発生した後に待機しているプロセスの状態をチェックする必要がある場合があります。 WaitForSingleObject が返されるまでに、いくつかのタスクが完了する可能性があります。