時間がかかる処理での「応答なし」回避方法



【「応答なし」について】

 様々なアプリケーションを利用されているWindowsユーザーにとって、 ウィンドウのタイトルバーに「応答なし」と表示されるのを見かけた記憶はあるはずです。
 WindowsXP以降、処理に時間がかかる場合に、 各アプリケーション(ウィンドウ)のタイトルバーに「応答なし」が表示されるという仕様になり、 この仕様の弊害で画面が真っ白になるなどフリーズしているのかどうか判らないという状況に遭遇することがあります。
 特に処理負荷の高いCAD/CAM系ソフトではよく見られます。 またWindows Vista/7/8/10では、x64環境が主流で扱うデータが増え、その発生率が高まってきています。
 実際は処理が正常に行われている場合、待っていれば復活するのですが、例えば64bit版TRYCUT3000では、 Windows Vista/7/8/10上でギガバイト単位のデータを扱いますと、 待ち状態中に描画イベントが自動生成されループ状態になる例が出ています。
 別途、アプリケーション側で、これらの描画イベントを無視するなどの対応を行っていますが、 副作用の懸念もあり対応を見合わせている部分もあります。

 一方、本件はOS側の設定変更で回避できます。当初はあまり報告されていませんでしたが、 最近ではよく使う手段のようです。実際弊社内のテストPC(Windows7/8)で設定変更しても副作用は無く良好な結果でした。 本来OS側の内部パラメータを変えるのは避けたいところではありますが、 「応答なし」の発生率から見て、特にCAD/CAM系アプリケーションを多用されているユーザー様には推奨したいと思います。 次にその方法を書いておきます。


【対応策】

 レジストリの「応答なし」と判断する時間を設定するパラメータ(HungAppTimeout)を 操作し、より大きな値を設定することで回避させることができます。

例えばWindows7上で、レジストリエディタを起動して値を設定(新規、変更)する手順は以下です。 (※他のOSの場合も若干の違いはありますが、同様の設定ができます。)

1. 左下[スタート] ボタンをクリック
2. [プログラムとファイルの検索] に regedit と入力
3. ユーザーアカウント制御のダイアログで [はい(Y)] をクリック
(※コマンドプロンプトからregeditでも起動可)
4. [HKEY_CURRENT_USER] → [Control Panel] → [Desktop]で右クリック
5. [新規(N)] → [文字列値(S)](※XPでは不要)
6. [値の名前] にHungAppTimeout と入力して、[値のデータ] に希望の数値を入力
(※XPでは既に存在するHungAppTimeoutの値を変更)
7. OSを再起動

※HungAppTimeoutの単位は1/1000秒です。 Windows7/8では初期状態で省略されていて5000=5秒と認識しているようです。 例えば30000などと入れますと状況が大きく変わるはずです。


トップページへ  Windows Vista/7/8/8.1/10のUAC対策はこちら