1

MsgWaitForMultipleObjects を使用してメッセージ ループを実行し、UI メッセージの送信中に追加のイベントをキャッチするアプリケーションがあります。ウィンドウが移動またはサイズ変更されるとすぐに、マウスが離されるまで DefWindowProc が独自のメッセージ ループを開始するようです。この状況は、その間に外側のループが追加のメッセージをキャッチすることを防ぎます。

このためだけに、アプリケーションをマルチスレッド化するのは嫌です。それを解決する他の方法はありますか?

4

2 に答える 2

0

Windows API には、独自のメッセージ ループに入る追加の場所がいくつかあります。これらの時間帯に引き続きメッセージを処理する必要がある場合は、別のスレッドが必要になります。

于 2009-10-05T12:14:48.403 に答える
0

MsgWaitForMultipleObjects は、従来のマルチスレッド プログラムではほとんど使用されません。ゲームでは、従来の非クライアント フレーム要素が省略され、"MessageBox" や "DoDragDrop" などの API が回避されます...

通常、可視ウィンドウをホストしない「UI ワーカー」スレッドで最もよく使用されますが、スレッド間メッセージング システムとしてメッセージ キューを使用し、カーネル ハンドルも待機する必要があります。

あなたの場合、2 番目のスレッドを作成することは避けられないようです。皮肉なことに、PostThreadMessage + MsgWaitForMultipleObjects は、GUI スレッドと「ui」ワーカー スレッドとの間の信頼できる通信メカニズムを設定する最も簡単な方法です。

于 2009-10-05T12:45:01.097 に答える