Название: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 16:13 Доброго времени суток!
Наткнулся на такую штуку: если закрывать приложение до того как придет ответ от сервера, то класс формы закрывается, а вот приложение продолжает висеть в памяти в ввиду наличия незавершенных потоков. Привожу тестовый пример. На разных машинах возможно надо будет поиграться значением таймера немного. Код
после запуска такой программы она все еще "висит" после "выхода". Вопрос: это баг или я что-то неправильно делаю? Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: serg_hd от Июнь 24, 2010, 16:36 попробуй в деструкторе для MainWindow вызвать deleteLater() для QNetworkAccessManager'a.
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 16:42 пробовал
и manager->deleteLater(); и reply->abort(); reply->deleteLater(); безрезультатно Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: ecspertiza от Июнь 24, 2010, 16:47 естественно, покурите про deleteLater() он удалит объект только после того как на него не будет ничего ссылаться, и завершаться процессы связанные с объектом, удали его жестко
Код: delete manager; Но возможно Exception словишь. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: serg_hd от Июнь 24, 2010, 16:49 естественно, покурите про deleteLater() он удалит объект только после того как на него не будет ничего ссылаться, и завершаться процессы связанные с объектом, удали его жестко Note: After the request has finished, it is the responsibility of the user to delete the QNetworkReply object at an appropriate time. Do not directly delete it inside the slot connected to finished(). You can use the deleteLater() function.Код: delete manager; Но возможно Exception словишь. Да и сам проверял, было время, ловил ещё как :) Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 16:58 во-во!
я даже пробовал делать manager не динамическим и внутри конструктора - т.е. заведомое жесткое убийство по отработке конструктора и все равно успевает нахадить. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: BRE от Июнь 24, 2010, 17:08 А если так?
Код
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 17:12 все тоже - "висит"
Может быть как "костыль": как-то(я просто не знаю как) получить список всех потоков приложения и послать им quit()? Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: BRE от Июнь 24, 2010, 17:15 все тоже - "висит" Покажи main.cppМожет быть как "костыль": как-то(я просто не знаю как) получить список всех потоков приложения и послать им quit()? Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 17:19 Код это тестовая версия на просто приложении с GUIем Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: BRE от Июнь 24, 2010, 17:23 Выложи пожалуйста этот тест в виде архива (все файлы + .pro), что бы не нужно было копи-пастить.
И скажи на какой ты платформе это пробуешь и версию Qt. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 17:32 Qt 4.6.2 + Qt Creator
Windows XP SP3 Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: BRE от Июнь 24, 2010, 17:39 А проверь так:
Код
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 17:42 и это пробовал .... все тоже
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Kolobok от Июнь 24, 2010, 17:55 Qt 4.6.2 + Qt Creator
Windows 7 не висит. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 18:06 попробуй поиграться таймером - надо поймать момент когда http запрос ушел, а ответ еще не вернулся
Не исключаю, что это может быть глюк моей машины которая не перезагружается месяцами. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Kolobok от Июнь 24, 2010, 18:18 Поигрался. Не виснет.
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 18:25 Позволите поинтересоваться:
1. разброс времен которое ставили 2. тип доступа до скачиваемого объекта(pppoe, proxy) и скорость соединения Завтра погоняю на Windows 7 Да, под "висит" в данном случаи я понимаю процесс оставшийся в памяти. На всякий случай Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Kolobok от Июнь 24, 2010, 18:29 1. 0-500 ms.
2. ADSL 6000 Mbit. Прокси нет. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 24, 2010, 18:34 Спасибо
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: serg_hd от Июнь 24, 2010, 19:51 Так проблема решена что-ли? И каким образом?
Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июнь 25, 2010, 10:50 Нет, но наблюдается очень интересное поведение. А именно:
- на моей машине даже после перезагрузки процесс остается в памяти - на виртуальной машине запущенной с моей машины все нормально отрабатывается. Может это как то от организации доступа к нету и проксирования зависит. У меня ISA Server. Название: Re: Баг QNetworkAccessManager или кривые руки? Отправлено: Sanya от Июль 01, 2010, 11:53 Обновился до Qt 4.6.3 и Qt Creator 2.0
Ошибка исчезла. |