長期間の操作では、C++ Win32アプリケーションは数秒ごとに不規則に更新されるプロセスバーを持つモーダルステータスダイアログを表示します。 Windows 7からは、Windowsがすぐに「ハングするようです...」というメッセージを表示したり、ウィンドウタイトルバーに「応答していません。Windows 7で忙しいアプリケーションが「応答しない」状態になる - WM_UPDATE
これを回避するには、プロセスダイアログでメッセージを処理する必要があることがわかりました。具体的には、Windows 7は、プログラムが稼働しているかどうかを確認するために、常にWM_UPDATEメッセージを送信しているようです。このダイアログでは、プロファイルの実行が大幅に減速していることを示すため、以前は不要なメッセージ処理をすべて無効にしていました。
しかし、私たちはこの問題を解決すると考えていましたが、Windowsは「ハングするようです」と表示したり、ウィンドウタイトルバーに「応答しない」と表示します。数秒。
質問:
は、Windows 7(またはWindows Vistaの場合)での動作のこの変更についてのマニュアルはありますか?我々は何も発見していない。また、メッセージングの動作には他にもいくつかの変更がありました。
このような "is alive"チェックをすべて無効にする方法はありますか?私たちのアプリケーションはかなり生き生きとしており、プロセスはかなり長くかかります。
EDIT:はより具体的には - 私たちは唯一の各数秒何がPeekMessage
/TranslateMessage
/DispatchMessage
メッセージポンプを呼んでいます。
これは非常に古いレガシープログラムなので、近い将来別のワーカースレッドを使用することはできません。私たちはもちろん新しいコードのためにそれを行います。私の主なポイントは、Windows Vista/Windows 7でこの動作が間違いなく変更されたことです。私はそのドキュメントを見つけられませんでした。
これは、バックグラウンドワーカースレッドのために叫んでいます。 – Deanna
"**不要な**メッセージの処理をすべて無効にする" - MSDNはこの件に関して非常に明確です: "[ウィンドウプロシージャ]がメッセージを処理しない場合、**メッセージをデフォルト処理のためにシステムに返送する必要がありますウィンドウプロシージャは、DefWindowProc関数を呼び出すことでこれを行います。 – MSalters
私の編集を参照してください –