midiInOpenのdwFlagsのCALLBACK_THREADって何?と思って調べてみた。
http://ho3264.blog72.fc2.com/blog-entry-157.html
上記はwaveInXXXXの例だけどおそらくMIDIでも同じだろう。スレッド関数の中でメッセージループを回してMIDIメッセージをGetMessage()で受け取るのである。CALLBACK_THREADって指定したスレッドのメッセージキューにMIDIメッセージを送るということなのであった。
しかしこのdwFlagsの説明ってよくわからないな。。 http://msdn.microsoft.com/ja-jp/library/cc410524.aspx
フラグの説明中に各フラグを指定したときにどういう処理を書かねばならないのか書いてないので私のようなよく知らない人が見ると路頭に迷ってしまう。CALLBACK_FUNCTION
dwCallback パラメータはコールバックプロシージャアドレスです。
CALLBACK_NULL
コールバック機構はありません。この値が既定の設定です。
CALLBACK_THREAD
dwCallback パラメータはスレッド識別子です。
CALLBACK_WINDOW
dwCallback パラメータはウィンドウハンドルです。
ひょっとすると過去にはチュートリアルとかガイドラインがあったのかもしれないのだけれど、枯れたAPIだからその部分が削除され、リファレンスだけが残っている感じがする。
各フラグの意味および指定するとメッセージはどのように送られ、それをどう処理するかを下に書いておく。
- CALLBACK_FUNCTION
- dwCallbackパラメータはコールバック関数へのアドレスであることをOSに通知します。OSは指定したコールバック関数にメッセージを送信します。コールバック関数はMidiInProcと同じ変数パラメータを持つ必要があります。APIの使用者はコールバック関数内でメッセージを処理します。
- CALLBACK_NULL
- コールバック機構はありません。この値が既定の設定です。
- CALLBACK_THREAD
- dwCallback パラメータはスレッド識別子であることをOSに通知します。OSは指定したスレッドのメッセージキューにメッセージを送信します。APIの使用者は指定したスレッド関数でGetMessageを使用してメッセージキューからメッセージを取り出し、処理します。
- CALLBACK_WINDOW
- dwCallback パラメータはウィンドウハンドルであることをOSに通知します。OSは指定したウィンドウのメッセージキューにメッセージを送信します。APIの使用者はウィンドウプロシージャ内でメッセージを処理します。