0

私が取り組んでいる複数のダイアログ MFC クライアント アプリがあります。このクライアントは、多くのメッセージ (>10Hz) をメイン ダイアログに受信できます。メイン ダイアログは、多くの場合、いくつかの小さな機能を実行し、そのメッセージを別のダイアログに転送して処理します。
私の特定のケースでは、メイン ダイアログは車両の位置に関連するメッセージを受信し、その GUI のいくつかのフィールドを更新してから、PostMessage を介してすべての車両情報を表示するウィンドウに渡します。

基本的に、私の質問は次のとおりです。メッセージを投稿することと、dialog.update (私が作成した関数) を呼び出すことの違いは何ですか?

4

2 に答える 2

0

あなたのアプリケーションはマルチスレッド化されており、スレッドの 1 つがデータを受信して​​おり、GUI スレッドとは異なると思います。直接呼び出しPostMessageではなく、他のスレッドからこのダイアログにのみ使用する必要があります。SendMessage

あまりにも多くのメッセージを受信して​​いる場合は、カウント (たとえば 5000) またはタイムアウトのいずれかでバッファリングする必要があります。メッセージをvectorlistまたはその他の好きなコレクションに保存できます。後で送信するときに、このコレクションのアドレスをWPARAM(またはLPARAM) としてダイアログに投稿します。ダイアログはそれを一度に取得し、処理します。このアプローチは、アプリケーションの他の設計パースペクティブについて認識していないため、正しくない可能性があります。

試行錯誤のアプローチが必要です。実際のパフォーマンスと安定性の利点が得られる場所を確認してください。

于 2012-07-18T08:16:25.047 に答える
0

あなたの dialog.update() が何をするかわからないので、どうやって違いを知ることができるでしょうか?

別の PostMessage を実行している場合、その意味がわかりません。プログラムは、新しく投稿されたメッセージを取得するためにメッセージ ループの別の反復を待機する必要があり、そのメッセージが投稿される前に別のメッセージを受信する可能性があります。PostMessage の代わりに、SendMessage を使用すると、別のメッセージのメッセージ ループを繰り返すことなく、メッセージを WndProc に直接送信できます。

マルチスレッドの場合、Windows はコンテキストを自動的に切り替える必要があるため、メッセージの送信または投稿はもう少しスレッド セーフになると考えています。シングルスレッドの場合は、おそらく問題にならないはずです。

于 2012-07-17T17:49:44.390 に答える