我想实现在单独的线程中下载文件并存储该文件,但我无法找到一个合适的方式来实现这个没有恶意延迟(相当频繁下载小文件,所以信号+插槽太慢)。 我想达到什么: (伪码)同步的C++/Qt下载文件
request file;
wait for download finishing, timeout or error;
save downloaded file;
我宁愿用QNetworkAccessManager如果可能的例子。 谢谢你的任何提示。
编辑:只需要清楚,我想要的信号和插槽不是因为设计和速度的缺乏。
编辑2:此下载只是关于同步部分的下载文件,线程是没有问题的。 问题是,QT没有提供这样做的API,我不热衷于等待。
EDIT3:示例代码像它应该工作,但不会:
QNetworkAccessManager net;
QNetworkReply *re (net.get(QNetworkRequest(QUrl(Qstring("www.blah.org/key")))));
if (re->waitForReadyRead(-1)) //! @bug this does not work as supposed, waitForRead returns false and returns INSTANTLY!!
qDebug() << "ReadyRead yeha!!!";
if (re->error()) {
qDebug() << "Can't download" << re->url().toString()
<< ":" << re->errorString();
} else {
img->load(re->readAll());
qDebug() << "Savin IMG";
}
delete re;
似乎没有本地事件循环你的“重新”甚至不知道它完成。我遇到过类似的问题。附:不要直接删除QNetworkReply,请使用“deleteLater”。 – QtRoS 2015-02-17 21:42:42