Почему мое приложение MFC зависает, когда я создаю исключение?

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

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Почему я публикую этот вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

Пусть будут зависания, часть 1 из 4

Пусть будут зависания, часть 2 из 4

Пусть будут зависания, часть 3 из 4

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top