@terminator-light

Как реализовать ожидание завершения запроса с QNetworkAccessManager в Qt?

В инете есть примеры, как его реализовать с подключением слота к сигналу QNetworkReply::finished с QEventLoop, а к QNetworkAccessManager::replyFinished не нашел. Внутри обработчика после получения данных на их основе отправляется еще запрос и так повторяется.
Также хотелось узнать, как можно поставить таймаут. Если в течение 3 секунд не удалось подключиться, то отправляет другой запрос.
  • Вопрос задан
  • 915 просмотров
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
QNetworkAccessManager manager;
QEventLoop loop;
QObject::connect(&manager, QOverload<QNetworkReply*>::of(&QNetworkAccessManager::finished),
                 &loop, &QEventLoop::quit);
...
loop.exec();

А для таймаута можете вызвать QTimer::singleShot(3000, &loop, &QEventLoop::quit);

PS: следует вообще избегать блокировок, а обрабатывать все в слотах класса. Следует учитывать что один экземпляр QNetworkAccessManager ограничен четырьмя одновременными подключениями.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы