Je travaille sur une application mobile Qt assez standard (écrite en C++, ciblée sur les appareils Symbian), et je trouve parfois que lorsque l'application est fermée (par exemple via un appel à QApplication :: quit), le dernier destructeur de l'application peut prendre beaucoup de temps à retourner (30 secondes plus). Par cela je veux dire, toutes les opérations de nettoyage dans le destructeur ont terminé (rapidement, tout bien dans une seconde) et nous avons atteint le point où l'exécution quitte le destructeur et retourne au code qui l'a implicitement appelé (ie lorsque nous supprimons L'object). Évidemment, à ce moment-là, je m'attendrais à ce que l'exécution revienne juste après l'appel pour supprimer l'objet, presque instantanément, mais comme je le dis parfois, cela prend un âge!Qt destructeur de C++ prend beaucoup de temps à retourner
Cette longue fermeture se produit à la fois dans les versions de débogage et de publication, avec la journalisation activée ou désactivée, donc je ne pense pas que ce soit un facteur ici. Quand nous arrivons à la fin du destructeur, je suis quasiment certain qu'aucun descripteurs de fichiers ne sont laissés ouverts, ou aucune autre ressource ouverte (connexions réseau etc ...) ... même si, sûrement, cela ne poserait pas de problème sur quitter le destructeur (?).
Il s'agit de la suppression de l'objet QMainWindow de l'application. Actuellement l'appel à faire ceci est dans un slot connecté à QApplication :: aboutToQuit, bien que j'ai essayé de supprimer cet objet aussi dans la fonction "main" des applications.
La longueur du délai que nous expérimentons semble proportionnelle à la quantité d'activité dans l'application avant de sortir. Ce genre de me fait penser que les fuites de mémoire peuvent être un problème ici, cependant nous ne sommes pas au courant (ne veut pas dire ne sont pas bien sûr), et aussi je n'ai jamais vu ce comportement avant avec fuite Mémoire.
Quelqu'un a-t-il des idées sur ce qui pourrait se passer ici?
Vive
Est-ce que vous rencontrez ce problème si vous utilisez également un débogueur? Pouvez-vous isoler la (les) ligne (s) de code qui prend si longtemps? –
Oui, je vois cela dans le débogueur aussi. En ce qui concerne l'isolation des segments de code qui prennent trop de temps, le problème est que le retard se produit lors du retour du destructeur lui-même. Ainsi, la dernière ligne du destructeur est terminée, nous sortons du destructeur et c'est à ce moment que le retard se produit. Je crois que le framework Qt fait quelque chose à ce moment-là qui cause le retard, même si je ne sais pas encore quoi. – busta83