Почему мое приложение MFC зависает при выдаче исключения? - PullRequest
4 голосов
/ 27 сентября 2008

Если вы выбросите исключение из диалога MFC, приложение зависнет, даже если в вашем коде есть блок catch. Он отказывается реагировать на мышь или клавиатуру, и единственный способ его выключить - использовать диспетчер задач.

Почему я пишу этот вопрос

К моему стыду, есть популярное приложение, упакованное в термоусадочную пленку, которое зависает каждый раз, когда в модальном диалоге встречается исключительная ошибка. Когда мы сделали огромный переход от целочисленных кодов ошибок к исключениям, я отвечал за выбор std :: exception в качестве базового класса для создаваемых исключений. Лишь в процессе конверсии была проделана огромная работа, и наше тестирование выявило эту проблему, и к тому времени было уже слишком поздно что-либо менять. Надеюсь, этот вопрос / ответ не допустит, чтобы кто-то совершил ту же ошибку.

Ответы [ 3 ]

8 голосов
/ 27 сентября 2008

Код для CDialog :: DoModal делает диалог модальным, отключая родительское окно. Когда код диалога возвращается, окно снова включается. Существует явный улов для ошибок CException *, но не для каких-либо других исключений; таким образом, родительское окно никогда не включается.

Измените свой код так, чтобы он указывал на любое исключение, полученное из CException, и вы исправите проблему.

3 голосов
/ 25 марта 2009

Если вы заинтересованы в том, чтобы узнать, как Windows обнаруживает приложения, мы добавили несколько сообщений в блог об ошибках Windows:

Пусть будет висеть часть 1 из 4

Пусть будет висеть часть 2 из 4

Пусть будет висеть часть 3 из 4

Пусть будет висеть часть 4 из 4

Важно отметить, что эта информация, отправляемая через Microsoft Windows Reporting Error, передается разработчикам программного обеспечения, чтобы попытаться устранить эти проблемы. Если вы отправляете отчеты об ошибках, вы поможете решить проблемы, возникающие на вашем компьютере!

Я являюсь руководителем программы в Microsoft в группе отчетов об ошибках Windows.

1 голос
/ 04 ноября 2010

Марк ответ правильный. Для более тщательного анализа этой проблемы и подробного предложения по ее решению в своем собственном коде см. Этот FAQ Дуга Харрисона (в частности, раздел Q6).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...