LINUX.ORG.RU

[Qt] Возврат из функции после выполнения слота.

 


0

0

Есть объект http класса QHttp. Некая функция запускает http->get() и выходит. Можно ли как-то сделать, чтобы функция возвращала значение только после того, как запрос будет выполнен (то есть после сигнала done() или requestFinished() от объекта http и выполнения связанного с ним слота)?

★★★

Создай отдельный поток и завершай его, когда закончишь http-запрос. Соответственно в основном коде жди завершения потока. Например, так.

mannaz
()

Можешь попробовать сделать вот так:

http->get(); while (http->currentId()); // ждет, пока все запросы выполнятся.

smh ★★★
()
Ответ на: комментарий от mannaz

И не сделаю, я пробовал так (в качестве крайней меры), но до того как цикл не завершится, requestId(), state() и прочее не меняются.

unikoid ★★★
() автор топика
Ответ на: комментарий от unikoid

Это потому, что до завершения цикла управление в event loop не возвращается.

mannaz
()
Ответ на: комментарий от unikoid

> И не сделаю, я пробовал так (в качестве крайней меры), но до того как цикл не завершится, requestId(), state() и прочее не меняются.

Хех, оно в общем-то и понятно почему не работает. :-) Я тоже, в общем-то, так бы не делал скорее всего. Наверное лучше сделай как mannaz сказал. Хотя, такое тоже сработает:

QEventLoop loop;
http->get();
while (http->currentId()) loop.processEvents();

smh ★★★
()
Ответ на: комментарий от smh

QEventLoop же не заводится, пока не вызвать exec(), разве нет? ИМХО должно быть как-то так (если запросы идут в основном потоке):

http->get();
while (http->currentId()) QApplication::processEvents();

В таком случае полезно также исключить из обработки события, связанные с взаимодействием с пользователем - см. флаги QEventLoop'а.

mannaz
()
Ответ на: комментарий от smh

> while (http->currentId());
опа, активное ожидание, реквестирую своего преподавателя со 2ого курса в тред, сейчас кому-то будет очень больно

PayableOnDeath
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.