C++ 如何在Qt中处理异步网络请求
我想发出一系列网络请求(在Qt中),其中一个请求的细节取决于最后一个请求的结果。当前我的代码如下所示:C++ 如何在Qt中处理异步网络请求,c++,qt,networking,asynchronous,C++,Qt,Networking,Asynchronous,我想发出一系列网络请求(在Qt中),其中一个请求的细节取决于最后一个请求的结果。当前我的代码如下所示: QNetworkReply *reply = m->get(QNetworkRequest(QUrl("http://qt-project.org"))); reply->connect(reply,&QNetworkReply::finished,[=](){ //Do something with reply, calculate a value
QNetworkReply *reply = m->get(QNetworkRequest(QUrl("http://qt-project.org")));
reply->connect(reply,&QNetworkReply::finished,[=](){
//Do something with reply, calculate a value for the next request
QNetworkReply *reply2 = m->get(QNetworkRequest(QUrl("http://www.google.de")));
reply->deleteLater();
reply2->connect(reply2,&QNetworkReply::finished,[=](){
//Do something with reply2, calculate a value for the next request
QNetworkReply *reply3 = m->get(QNetworkRequest(QUrl("http://amazon.de")));
reply2->deleteLater();
reply3->connect(reply3,&QNetworkReply::finished,[=](){
//...
});
});
});
虽然这样做有效,但我看到了两个问题:
MonadSurprise.dO({
res1 <= request("http://qt-project.org");
res2 <= request("http://www.google.de");
res3 <= request("http://amazon.de");
});
MonadSurprise.dO({
res1实现异步信号/插槽机制来发送和接收请求。使用状态变量告诉您当前正在处理的请求。在插槽中,还可以请求发送方()
@owacoder你能详细说明一下吗?我看不出这会如何简化代码…@Nathan-在初始化请求链和最后一个请求完成时创建一个名为的插槽。检查最后一个请求的回复,并相应地启动一个新的。这将请求链简化为一个replyFinished
函数,而不是嵌套if
s的d。
MonadSurprise.dO({
res1 <= request("http://qt-project.org");
res2 <= request("http://www.google.de");
res3 <= request("http://amazon.de");
});