CreateEvent で作成されたグローバル イベントがあり、OpenEvent を使用して別のアプリケーションでこのイベントへのハンドルを取得します。
次に、次のようなことをしたい:
(疑似コード)
register_event_change_notification(my_call_back);
void my_call_back()
{
// do work
}
my_call_back は、register_event_change_notification を呼び出したのと同じスレッドで実行されます。しかし、私の問題は、これを許可する API が見つからないことです。次のオプションしかないようです。
WaitForSingleObject を使用するスレッドを作成し、my_call_back を呼び出すだけで、すべてにクリティカル セクションを配置します。
WaitForSingleObject を使用するスレッドを作成し、メイン スレッドをメッセージ ループでブロックします。その後、WaitForSingleObject が my_call_back をメッセージ ループと同じスレッドで実行するときにイベントを投稿します。
これは、何度も解決されたに違いない単純な問題のように思えますか? イベントがいつIMOに通知されたかを知るためだけに、スレッド化の問題に対処しなければならないのはやり過ぎです。
編集:
結局、私は QueueUserApc を使用することにしましたが、スレッドをアラート可能な状態にするには、メッセージの書き込みで *Ex API を使用する必要があることを意味します。もう 1 つの落とし穴は、未処理の APC を追跡する必要があり、すべての APC にサービスを提供する前にオブジェクトを破棄しないことです。そうしないと、破壊/削除されたオブジェクトにキューに入れられた APC を取得します。