GetMessageの前になぜPeekMessageなのですか?
-
27-09-2019 - |
質問
メッセージキューを作成するためにgetMessage()の前にPeekMessageステートメントが必要なのはなぜですか?
解決
必須ではありません。
ただし、表示されるのは、メッセージを処理する準備ができていないスレッドですが、メッセージキューでそれらを受信できるようにしたいと考えています。新しいスレッドにはすぐにメッセージキューがありませんが、呼び出します PeekMessage
メッセージキューを作成するのに十分です。メッセージがないため、すぐに戻ります。これにより、スレッドが準備を整え続けることができます。それまでの間、他のスレッドは新しいスレッドのメッセージのキューイングを開始できます。新しいスレッドの準備ができたら、呼び出します GetMessage
キューから最初のメッセージを取得するか、メッセージがキューに配置されるのを待つために。
他のヒント
そうではありません。 2つの関数は異なることをします。
PeekMessage(...)はメッセージが表示されるのを待つことはありません。オプションでキューから削除すると、最初のものがあります。メッセージを待っている間に処理を行っているアプリではより一般的であり、ただそこに座って次のメッセージを永遠に待つことはできません。リアルタイムゲームなどは、このカテゴリに簡単に該当します。
getMessage(...)メッセージがあるまで待って、それを取得します。それはより効率的なcpuwiseであり、絶えずポーリングしていませんが、メッセージがない場合は一時停止します。 Formyアプリや、常にリアルタイム処理を必要としない他のプログラムでは、より一般的です。
使用する理由は複数あります PeekMessage
の前/代わり GetMessage
:
- メッセージが届くまでプログラムが掛けられないようにしてください - それは少し冗長です。
PeekMessage
とともにPM_REMOVE
メッセージキューを投票して除外するフラグGetMessage
全体的に。 - で関数を使用します
PM_NOREMOVE
キューからメッセージを処理および/または削除するかどうかを決定します。 - 電話
IsWindowUnicode
返されたメッセージのウィンドウハンドルとどちらかを選択するPeekMessageA
またPeekMessageW
. - 上記の複数。