У меня сейчас что-то вроде этого
void foo::replyFinished(QNetworkReply* rply)
{
.....
.....
}
void foo::ReceiveReport()
{
//Communicate with http
QUrl url(url_complete.c_str());
QNetworkRequest request;
request.setUrl(url);
currentReply = networkManager->get(request);
}
void foo::mymethodA() //Start from here
{
ReceiveReport();
-----------------> Wait();
MoreStuff();
}
Теперь происходит то, что я называю mymethodA. Этот метод называется ReceiveReport. В отчете приема есть сигнал, который соединяется с replyFinished(). Теперь я хочу подождать, пока я не получаю ответ от сети, и это происходит, когда вызывается responseFinished. В настоящее время проблема заключается в том, что метод MoreStuff() вызывается до запуска метода replyFinished(). Мой вопрос: как я могу заставить его подождать, пока я не получу ответ? Все они работают в одном потоке
Это не может работать без уродливого взлома processEvent(). Вам нужен слот, который выполняет обработку. Сигналы и слоты в Qt работают только в том случае, если вы оставите метод и даете qt время для запуска цикла событий.
Другим способом было бы использование разных потоков.
У вас нет асинхронного вызова С# и ждут в qt, пусть эта парадигма идет.
Пожалуйста, прочитайте документы о цикле событий Qt еще раз, чтобы лучше понять, а затем заставить себя программировать на основе событий, потому что это то, что qt может предложить и как он работает, как только вы запустите в QApplication exec()
processEvents
. Просто используйте QEventLoop
.
MoreStuff()
чтобыreplyFinished
реализация. Или сделайтеMoreStuff()
слотом и подключите его к сигналуQNetworkReply::finished
MoreStuff()
объекта, возвращаемого администратором сети.