無邪気に電話をかけようとしている
PeekMessage(&msg, 0, WM_KEYDOWN, WM_KEYUP, PM_NOREMOVE | PM_NOYIELD);
Windows Vista 64 は、PeekMessage 呼び出しでメッセージを処理しています。その結果、ペイント呼び出しやその他のあらゆる種類のコードで再入可能になります。
アプリケーションでは描画に数秒かかる場合があるため、PeekMessage 呼び出しを追加して、ユーザーがキーを押したかどうかを確認し、その描画を中断して次の描画を開始できるようにしました。Windows がメッセージの処理を開始できることに、私たちはほとんど気づきませんでした。ペイントの実際の作業を別のスレッドに入れるのは、大きなリファクタリングになります...特定のキーが押されたかどうか、またはマウス ホイールが回転したり、マウス ボタンがクリックされたりして、レンダリングが中断されたかどうかを確認しようとしています。
再入を防ぐために特別にコードを追加してから、描画メッセージをキューに再注入するなどを試みました。すべて非常に面倒で、うまく機能しない場合があります。
PeekMessage 呼び出しに追加できるフラグはありますか? MSDN のドキュメントには新しいものは何もありませんでした。PeekMessage
メッセージを処理しない が本当に必要です。ヘルプ!