例外をスローすると、MFCアプリがハングするのはなぜですか?

StackOverflow https://stackoverflow.com/questions/143006

  •  02-07-2019
  •  | 
  •  

質問

MFCダイアログ内から例外をスローすると、コードにcatchブロックがある場合でも、アプリがハングします。マウスやキーボードへの応答を拒否し、シャットダウンする唯一の方法はタスクマネージャーを使用することです。

この質問を投稿する理由

残念なことに、モーダルダイアログで例外的なエラーが発生するたびにハングする一般的なシュリンクラップアプリケーションがあります。整数エラーコードから例外に大幅に移行したとき、スローされた例外の基本クラスとしてstd :: exceptionを選択する責任がありました。私たちのテストでこの問題が明らかになったのは、変換に膨大な量の作業が費やされるまでではなく、それまでに変更するには遅すぎました。この質問/回答が誰かが同じ間違いをしないようにすることを願っています。

役に立ちましたか?

解決

CDialog :: DoModalのコードは、親ウィンドウを無効にしてダイアログをモーダルにします。ダイアログコードが戻ると、ウィンドウは再び有効になります。 CException *エラーには明示的なキャッチがありますが、他の種類のスローされた例外にはキャッチされません。したがって、親ウィンドウは再び有効になりません。

CExceptionから派生した例外へのポインターをスローするようにコードを変更すると、問題が修正されます。

他のヒント

Windowsがapphangsを検出する方法について知りたい場合は、Windowsエラー報告ブログでこれにいくつかの投稿を追加しました。

4部のうち1部がハングする

4部のうち2部がハングする

4部のうち3部がハングする

4部のうち4部がハングする

重要なのは、MicrosoftのWindowsエラー報告を介して送信されたこの情報は、これらの問題を試して修正するためにソフトウェア開発者に伝達されることです。エラーレポートを送信する場合は、PCで発生している問題の修正に役立ちます。

私は、MicrosoftのWindowsエラー報告チームのプログラムマネージャーです。

マークの答えは正しいです。この問題のより厳密な分析と、独自のコードで対処するための詳細な提案については、この Doug HarrisonによるFAQ (特にセクションQ6)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top