Russian Qt Forum

Qt => Работа с сетью => Тема начата: White Owl от Июнь 24, 2014, 17:25



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


Название: Re: Синхронная работа с QNetworkAccessManager?
Отправлено: Bepec от Июнь 24, 2014, 17:27
Ток что тема была про EventLoop.
http://www.prog.org.ru/index.php?topic=27198.msg196860#msg196860


Название: Re: Синхронная работа с QNetworkAccessManager?
Отправлено: White Owl от Июнь 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();
Все работает идеально.


Название: Re: Синхронная работа с QNetworkAccessManager?
Отправлено: OKTA от Июнь 25, 2014, 00:16
Если reply застрянет где-то, то застрянет вся прога..лучше бы добавить таймер, по которому так же делать выход из лупа..
А если обязательно надо дождаться данных и использовать синхронную работу, то как тогда (с условием, что ответ может идти пол дня)?


Название: Re: Синхронная работа с QNetworkAccessManager?
Отправлено: Bepec от Июнь 25, 2014, 06:28
Таймер оставляйте, его не зря мы туда добавили в качестве страховки :)

to OKTA:
Таки мы говорим о синхронной работе. Будет ждать полдня. Или вы ещё какой нить способ синхронной работы знаете? :)


Название: Re: Синхронная работа с QNetworkAccessManager?
Отправлено: OKTA от Июнь 25, 2014, 09:17
Продолжу свои мытарства в той теме  ;D