Qt - co zrobić, aby metody GET i POST wykonywały się synchronicznie?

0

Chodzi mi o klasę QNetworkAccessManager. Metody GET i POST z niej wykonują się asynchronicznie. Co zrobić, aby wykonywały się synchronicznie i żeby można było np. serię zapytań robić w zwykłej pętli while/for, zamiast poprzez rekurencję?

1

Możesz np. użyć lokalnego EventLoopa. Ale jeśli teraz wysyłasz requesty w wątku gui, to zastanów się nad tym, czy nie będzie lepiej wywalić wszystkiego do osobnego wątku.

code sample:

QEventLoop loop;
QNetworkReply *reply = m_networkAccessManager->post(...); // lub m_networkAccessManager->get(...);
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
loop.exec();
// handle reply...

Po otrzymaniu odpowiedzi lub wystąpieniu błędu loop się kończy i program może robić z reply to co teraz prawdopodobnie robi w slocie podpiętym do &QNetworkAccessManager::finished.

0

@git Przetestowałem to i działa :) Rozumiem, że w praktyce takie użycie będzie na pewno dobre, jeśli zechcę pobrać 5 razy zawartość jakieś strony?

    for(int i=0; i<5; ++i)
    {
        QEventLoop loop;
        reply = manager.get(QNetworkRequest(QUrl("http://localhost/test/")));
        connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
        loop.exec();
        testString += reply->readAll();
        ui->textBrowser->setText(testString);
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1