我想實現在單獨的線程中下載文件並存儲該文件,但我無法找到一個合適的方式來實現這個沒有惡意延遲(相當頻繁下載小文件,所以信號+插槽太慢)。 我想達到什麼: (僞碼)同步的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