Я хочу добиться загрузки файла в отдельном потоке и сохранить этот файл , но я не смог найти подходящий способ для достижения этого без злой задержки (довольно частая загрузка небольших файлы, поэтому сигнальные + слоты слишком медленные). То, что я хочу добиться: (псевдокод)Синхронизация файла C++/Qt
request file;
wait for download finishing, timeout or error;
save downloaded file;
Я предпочел бы пример с QNetworkAccessManager, если это возможно. Спасибо за любой типп.
Редактировать: Чтобы быть ясным, я хочу, чтобы сигнал и слоты не были из-за дизайна, а также из-за отсутствия скорости.
Редактировать2: Эта загрузка относится только к файлу загрузки в части синхронизации, потоки не представляют проблемы. Проблема в том, что QT не обеспечивает api для этого, и я не увлекаюсь ожиданием hotspinning.
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