Tout en conservant un ancien produit, je suis tombé sur une erreur qui entraîne le remplissage de l'écran avec des centaines de boîtes de message disant 'C++ Exception' et rien d'autre. Je traçais le problème à la ligne suivante:Pourquoi ProcessMessages peut-il lancer une exception C++?
Application->ProcessMessages();
Je comprends le but de cette ligne, pour traiter tous les messages dans la file d'attente de messages, mais je ne suis pas sûr de ce qui cause l'erreur.
Je ne suis pas à la recherche d'une solution spécifique, mais je me demande si quelqu'un d'autre a eu ce problème ou peut savoir quel genre de situations peut causer cela se produise.
La fermeture de toutes les boîtes de message entraîne l'application de revenir à la normale, le comportement attendu.
Mise à jour - Après quelques recherches supplémentaires, j'ai constaté que les erreurs ne sont pas nécessairement la faute de ProcessMessages. Les erreurs se produisent car le programme effectue des calculs intensifs et manque réellement de mémoire. Il semble que commenter ProcessMessages réduit la consommation de mémoire juste assez pour passer à travers les calculs sans erreurs. Par conséquent, ProcessMessages ressemble au coupable, mais en fait, ne l'est pas.
Il semble que je refactoring à faire.
Mise à jour 2 - Trois jours plus tard, je suis arrivé à la conclusion que l'erreur se produit uniquement lorsque ProcessMessages est appelé. Si je commente tous les appels à ProcessMessages (et à ma grande consternation, il y a beaucoup), l'application fonctionne très bien avec une consommation de mémoire constante, ce qui implique que les calculs intensifs ne sont pas aspirer la mémoire. La désactivation de l'appel provoque une nouvelle montée en flèche de la mémoire jusqu'au point d'erreur. Donc la question originale est la suivante: pourquoi ProcessMessages provoque-t-il cette erreur?
Il semblerait que certains appels sont faits à partir d'un événement de minuterie et d'autres sont fabriqués à partir de la principale exécution de l'application. Cela pourrait-il être un problème?
Quelle bibliothèque utilisez-vous? –
Je ne suis pas sûr de la bibliothèque utilisée. Il est construit avec Borland C++ Builder, si cela éclaire la question. ProcessMessages est une méthode de la classe TApplication pour les applications Windows C++ Builder. – Everett
Essayez d'attraper 'std :: runtime_error' - si l'exception est basée sur cette classe, vous pouvez obtenir plus d'informations' e.what() '. – AndiDog