Pourquoi mon application MFC se bloque-t-elle lorsque je lève une exception?

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

  •  02-07-2019
  •  | 
  •  

Question

Si vous lancez une exception à partir d'une boîte de dialogue MFC, l'application se bloque, même si votre code est bloqué. Il refuse de répondre à la souris ou au clavier et le seul moyen de l'éteindre consiste à utiliser le Gestionnaire des tâches.

Pourquoi je poste cette question

À ma grande honte, il existe une application populaire sous emballage rétractable qui se bloque chaque fois qu’elle rencontre une erreur exceptionnelle dans une boîte de dialogue modale. Lorsque nous passions massivement des codes d’erreur entiers aux exceptions, j’étais responsable de choisir std :: exception comme classe de base pour les exceptions levées. Ce n’est qu’avant qu’une énorme quantité de travail ait été consacrée à la conversion que nos tests ont mis au jour ce problème et qu’il était alors trop tard pour changer. Espérons que cette question / réponse empêchera quelqu'un de faire la même erreur.

Était-ce utile?

La solution

Le code pour CDialog :: DoModal rend la boîte de dialogue modale en désactivant la fenêtre parente. Lorsque le code de la boîte de dialogue est renvoyé, la fenêtre est réactivée. Il y a une capture explicite pour les erreurs CException *, mais pas pour tout autre type d'exception levée; ainsi, la fenêtre parente ne sera jamais réactivée.

Modifiez votre code pour afficher un pointeur sur toute exception dérivée de CException, et vous résoudrez le problème.

Autres conseils

Si vous souhaitez en savoir plus sur la façon dont Windows détecte les modifications d’application, nous avons ajouté quelques publications à ce sujet sur le blog Windows Error Reporting:

Que ce soit suspendu partie 1 de 4

Que la partie 2 de 4 soit suspendue

Que la partie 3 de 4 soit suspendue

Qu'il soit suspendu partie 4 de 4

Il est important de noter que ces informations, lorsqu'elles sont envoyées via le rapport d'erreurs Windows de Microsoft, sont communiquées aux développeurs du logiciel afin d'essayer de résoudre ces problèmes. Si vous envoyez vos rapports d’erreur, vous aiderez à résoudre les problèmes qui se produisent sur votre PC!

Je suis responsable de programme chez Microsoft au sein de l'équipe de rapports d'erreurs Windows.

La réponse de Mark est correcte. Pour une analyse beaucoup plus rigoureuse de ce problème et une suggestion détaillée pour y remédier dans votre propre code, consultez la section suivante: FAQ de Doug Harrison (section Q6 en particulier).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top