Деструктор Qt C ++ занимает много времени, чтобы вернуться

' я работаю над довольно стандартным мобильным приложением Qt (написанным на C ++ и предназначенным для устройств Symbian), и обнаруживаю, что иногда, когда приложение закрывается (т. е. посредством вызова QApplication :: quit), последний деструктор в приложении может занять долгое время для возвращения (30 секунд плюс). Под этим я подразумеваю, что все операции очистки в деструкторе завершены (быстро, все хорошо в течение секунды), и мы достигли точки, когда выполнение покидает деструктор и возвращается к коду, который неявно вызывал его (т.е. когда мы удаляем объект).

Очевидно, что в этот момент я ожидаю, что выполнение вернется сразу после вызова, чтобы удалить объект, практически мгновенно, но, как я говорю, иногда это занимает много времени!

Это длительное время закрытия происходит как в отладочной, так и в выпускной сборках, с включенным или отключенным ведением журнала, так что я не думаю фактор здесь. Когда мы дойдем до конца деструктора, я почти уверен, что ни один файловый дескриптор не останется открытым или какие-либо другие открытые ресурсы (сетевые подключения и т. Д.) ... хотя, даже если они, конечно, это не будет представлять собой проблему на выход из деструктора (?).

Это происходит при удалении объекта QMainWindow приложения. В настоящее время вызов для этого находится в слоте, подключенном к QApplication :: aboutToQuit, хотя я также пытался удалить этот объект в «основной» функции приложения.

Длительность задержки, которую мы испытываем, кажется пропорциональной величине активности в приложении, прежде чем мы выйдем. Такого рода заставляет меня думать, что утечки памяти могут быть проблемой здесь, однако мы не знаем о них (это не значит, что их нет [конечно же, ), а также я ' мы никогда не видели такого поведения с утечкой памяти.

Кто-нибудь знает, что здесь может происходить?

Приветствия

5
задан busta83 24 August 2010 в 14:33
поделиться