【发布时间】:2020-03-29 21:26:20
【问题描述】:
我的函数使用 QNetworkAccessManager 同时下载多个文件。然后它应该等待所有 QNetworkReply 回复完成,然后再继续执行其余代码。
但是我不能让 QEventLoop 处理多个连接,它要么在所有回复完成之前返回,要么就陷入我认为是无限循环的状态。
这是我的代码:
void DownloadFiles(QStringList urls)
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QEventLoop loop;
QNetworkReply *replies[6];
for (int i = 0, i < urls.lenght(); i++){
replies[i] = manager->get(QNetworkRequest(QUrl(urls[i]));
connect(replies[i], SIGNAL(finished()), &loop, SLOT(quit()));
}
loop.exec(); // Wait here
// Rest of code
}
另一个尝试,也许更荒谬:
void DownloadFiles(QStringList urls)
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QEventLoop loops[6];
QNetworkReply *replies[6];
for (int i = 0, i < urls.lenght(); i++){
replies[i] = manager->get(QNetworkRequest(QUrl(urls[i]));
connect(replies[i], SIGNAL(finished()), &loops[i], SLOT(quit()));
}
for (int i = 0; i < 6; i++)
loops[i]->exec(); // Wait here
// Rest of code
}
同样,我的目标是同时下载多个文件,并等待所有文件都完成,然后再继续执行其余代码。
【问题讨论】: