質問

メッセージキューを作成するためにgetMessage()の前にPeekMessageステートメントが必要なのはなぜですか?

役に立ちましたか?

解決

必須ではありません。

ただし、表示されるのは、メッセージを処理する準備ができていないスレッドですが、メッセージキューでそれらを受信できるようにしたいと考えています。新しいスレッドにはすぐにメッセージキューがありませんが、呼び出します PeekMessage メッセージキューを作成するのに十分です。メッセージがないため、すぐに戻ります。これにより、スレッドが準備を整え続けることができます。それまでの間、他のスレッドは新しいスレッドのメッセージのキューイングを開始できます。新しいスレッドの準備ができたら、呼び出します GetMessage キューから最初のメッセージを取得するか、メッセージがキューに配置されるのを待つために。

他のヒント

そうではありません。 2つの関数は異なることをします。

PeekMessage(...)はメッセージが表示されるのを待つことはありません。オプションでキューから削除すると、最初のものがあります。メッセージを待っている間に処理を行っているアプリではより一般的であり、ただそこに座って次のメッセージを永遠に待つことはできません。リアルタイムゲームなどは、このカテゴリに簡単に該当します。

getMessage(...)メッセージがあるまで待って、それを取得します。それはより効率的なcpuwiseであり、絶えずポーリングしていませんが、メッセージがない場合は一時停止します。 Formyアプリや、常にリアルタイム処理を必要としない他のプログラムでは、より一般的です。

使用する理由は複数あります PeekMessage の前/代わり GetMessage:

  1. メッセージが届くまでプログラムが掛けられないようにしてください - それは少し冗長です。 PeekMessage とともに PM_REMOVE メッセージキューを投票して除外するフラグ GetMessage 全体的に。
  2. で関数を使用します PM_NOREMOVE キューからメッセージを処理および/または削除するかどうかを決定します。
  3. 電話 IsWindowUnicode 返されたメッセージのウィンドウハンドルとどちらかを選択する PeekMessageA また PeekMessageW.
  4. 上記の複数。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top