Название: Удалить header - QNetworkAccessManager Отправлено: Paramon от Июнь 30, 2014, 14:49 Собственно устанавливаю заголовок через setRawHeader, как же его удалить перед вторым запросом?
И вообще правильно ли я делаю? Не допускаю ли каких-то утечек? Если я создаю через new - то удаляю через delete. Остальное не трогаю. ??? Код: QNetworkReply *networkReply; Название: Re: Удалить header - QNetworkAccessManager Отправлено: carrygun от Июль 01, 2014, 04:38 В документации не сказано ничего про возможность удаления хедера. Если установка пустого значения не поможет, то придется два объекта для запроса делать, ну или менять логику.
И вы не удаляете networkReply. Цитировать 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. Название: Re: Удалить header - QNetworkAccessManager Отправлено: Paramon от Июль 01, 2014, 10:28 В документации не сказано ничего про возможность удаления хедера. Если установка пустого значения не поможет, то придется два объекта для запроса делать, ну или менять логику. Пробовал уже и пустое значение, и, на всякий случай, DELETE/D - не помогает. Так и сделал - использую два объекта.И вы не удаляете networkReply. Исправил. Спасибо. :)Цитировать 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. Название: Re: Удалить header - QNetworkAccessManager Отправлено: Paramon от Июль 01, 2014, 10:34 Забыл. Хотел бы задать ещё один вопрос касаемо QTimer::singleShot (чтобы не плодить темы).
Вот создаю я таймер после первого запроса, а на втором запросе соединение рвется преждевременно. Методом научного тыка я понял, что рвется из-за первого таймера, который продолжает работать. Как его корректно остановить? ??? Название: Re: Удалить header - QNetworkAccessManager Отправлено: carrygun от Июль 01, 2014, 10:41 Вызвать stop() у таймера перед вторыми коннектами, у вас же объект лупа один. Но если честно, то я не очень понял, зачем вам там таймеры?
Название: Re: Удалить header - QNetworkAccessManager Отправлено: Bepec от Июль 01, 2014, 10:52 Если в момент лупа произойдёт непредвиденная ситуация, программа будет висеть вечно.
Так же это страховка от вложенных циклов. Недавно темка была. Название: Re: Удалить header - QNetworkAccessManager Отправлено: carrygun от Июль 01, 2014, 11:00 Может произойти что-то экстраординарное кроме error() и finished()?
Название: Re: Удалить header - QNetworkAccessManager Отправлено: Paramon от Июль 01, 2014, 11:12 Вызвать stop() у таймера перед вторыми коннектами, у вас же объект лупа один. Уж извините за тупость, но каким образом вызвать стоп? ???Но если честно, то я не очень понял, зачем вам там таймеры? Для задания таймаута, если сервер не ответит n секунд. На всех форумах советуют делать так.Название: Re: Удалить header - QNetworkAccessManager Отправлено: carrygun от Июль 01, 2014, 11:14 Да, понял, особые тонкости TCP. Не вижу вот, можно ли где-нибудь настроить таймауты для QNAM?
Название: Re: Удалить header - QNetworkAccessManager Отправлено: Bepec от Июль 01, 2014, 14:17 Вариантов "не ответа" масса :D начиная от проблем с сетью(бесконечный запрос при физическом отключении), заканчивая кривыми руками. Мои руки такую ситуацию смогли создать :D
PS таймаутов не видел. Название: Re: Удалить header - QNetworkAccessManager Отправлено: carrygun от Июль 02, 2014, 04:40 Уж извините за тупость, но каким образом вызвать стоп? ??? Наверное, стоит отказаться от использования статического метода. Название: Re: Удалить header - QNetworkAccessManager Отправлено: Paramon от Июль 02, 2014, 08:53 Разобрался. Всем спасибо. :)
|