Je fais une QCoreApplication Qt5 pour le téléchargement de fichiers à partir de serveurs FTP (commencé à HTTP, maintenant commuté).Façon correcte de fermer QCoreApplication
Je rencontre un problème lorsque mon programme doit être fermé. Après avoir ajouté exit(0)
dans downloader.cpp
, mon programme se termine maintenant, mais je reçois l'erreur suivante:
QWaitCondition: Détruit alors que les discussions sont toujours en attente.
Mon code est le suivant:
main.cpp
#include <QCoreApplication>
#include <downloader.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Downloader d;
d.doDownload();
a.exec();
}
**downloader.cpp**
#include "downloader.h"
Downloader::Downloader(QObject *parent) :
QObject(parent)
{
}
void Downloader::doDownload() {
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("ftp://ftp.fao.org/Public/GIEWS/windisp/40manual/wd4en.pdf")));
}
void Downloader::replyFinished (QNetworkReply *reply)
{
if(reply->error()) {
qDebug() << "ERROR!";
qDebug() << reply->errorString();
}
else
{
qDebug() << "Download finished!";
QFile *file = new QFile("C:/Users/jelicicm/Desktop/wd4en.pdf");
if(file->open(QFile::Append))
{
file->write(reply->readAll());
file->flush(); file->close();
qDebug() <<"Downloaded file size:" <<(file->size())/1024<<"KB";
}
delete file;
}
reply->deleteLater();
exit(0);
}
Je reçois la sortie suivante:
Télécharger Fini! Taille du fichier téléchargé ... QWaitCondition: Détruit alors que les threads sont toujours en attente.
Pour autant que je puisse le remarquer, tout ce que j'ai imaginé est fait. Le fichier est téléchargé et sa taille est présentée. Mais je suppose que cette erreur doit signifier quelque chose. Quelqu'un peut-il m'expliquer ce qu'est cette erreur, pourquoi cela se produit et comment le réparer?
Essayez d'utiliser qApp-> exit (0).Puisque votre classe de téléchargeur est un QObject, vous pouvez également créer et émettre un signal à la place de l'appel de sortie pour quelque chose comme "complete" et dans "complete" du téléchargeur principal connect à l'emplacement "QCoreApplication :: quit()". – iminyourbrain
qApp-> exit (0) ne donne rien de bon. va essayer de faire quelque chose avec la connexion de deux signaux ... Thaks pour votre réponse! – Rorschach