Russian Qt Forum
Ноябрь 23, 2024, 08:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Синхронная работа с QNetworkAccessManager?  (Прочитано 3596 раз)
White Owl
Гость
« : Июнь 24, 2014, 17:25 »

А можно ли сказать QNetworkAccessManager что работать надо в синхронном режиме?
Общая задача у меня сейчас: запросить страничку с https, прогнать ее через несколько регекспов, по результатам запросить еще одну страничку с https. Все надо выполнить последовательно. Странички маленькие и вся работа идет внутри локалки. Тут либо выполнится за доли секунды, либо не выполнится вообще.
Жутко лень синхронизировать обработчики событий. Может есть какой-то флаг (или враппер) которые превратят QNetworkAccessManager в аналог LWP::UserAgent?
Записан
Bepec
Гость
« Ответ #1 : Июнь 24, 2014, 17:27 »

Ток что тема была про EventLoop.
http://www.prog.org.ru/index.php?topic=27198.msg196860#msg196860
Записан
White Owl
Гость
« Ответ #2 : Июнь 24, 2014, 23:55 »

Спасибо.
Код:
    QNetworkAccessManager nam;
    QNetworkRequest request(QString("http://localhost/"));
    QNetworkReply *reply = nam.get(request);

    QEventLoop loop;
    //QTimer::singleShot(500, reply, SLOT(abort()));   // не уверен что оно нужно в моих условиях.
    QObject::connect(reply,SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();

    if(reply->error() == QNetworkReply::NoError) {
        qDebug() << "success";
        qDebug() << reply->readAll();
    } else {
        qDebug() << "fail";
        qDebug() << reply->errorString();
    }

    reply->close();
Все работает идеально.
Записан
OKTA
Гость
« Ответ #3 : Июнь 25, 2014, 00:16 »

Если reply застрянет где-то, то застрянет вся прога..лучше бы добавить таймер, по которому так же делать выход из лупа..
А если обязательно надо дождаться данных и использовать синхронную работу, то как тогда (с условием, что ответ может идти пол дня)?
Записан
Bepec
Гость
« Ответ #4 : Июнь 25, 2014, 06:28 »

Таймер оставляйте, его не зря мы туда добавили в качестве страховки Улыбающийся

to OKTA:
Таки мы говорим о синхронной работе. Будет ждать полдня. Или вы ещё какой нить способ синхронной работы знаете? Улыбающийся
Записан
OKTA
Гость
« Ответ #5 : Июнь 25, 2014, 09:17 »

Продолжу свои мытарства в той теме  Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 21.