@Saharman

Почему действия после функции происходят раньше, чем заканчивает выполнение сама функция?

Есть такой код:
b->update_data();
qDebug() << b->get_data();

Получается, что вторая строчка выполняется раньше, чем заканчивает свое выполнение 1 строчка.
Я подозреваю, что все потому что в 1 строчке происходит get-запрос, а потом вызывается слот respond, когда запрос выполняется, в которой и обрабатываются данные. Как сделать так, чтобы вторая строчка не выполнялась, пока не выполнит все действия первая?
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Можете организовать ожидание, QEventLoop:exec запустить после подключения к слоту QEventLoop:quit сигнала когда запрос завершен.

Вот мой пример для блокирующего запроса, его можно засунуть в функцию, и при ее вызове будет ожидание ответа
QNetworkRequest request(url); // Created by Ighor July
QNetworkReply *reply = manager->get(request);
reply->setParent(this);

int timeoutMS = 60000;
QEventLoop loop;
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
QTimer::singleShot(timeoutMS, &loop, &QEventLoop::quit);
loop.exec();

QByteArray answer = reply->readAll();
reply->deleteLater();


Либо делать все без блокировок, что предпочтительнее, и qDebug вызывать в слоте получившему сигнал что запрос завершен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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