2010-02-06 15 views
4

J'essaie d'utiliser la classe QTQNetworkAccessManager pour gérer certains téléchargements dans une application C++/QT multithread.En utilisant un QNetworkAccessManager.get, comment puis-je décider d'abandonner?

Sur le travailleur thread (edit: le thread est séparé pour d'autres raisons en dehors de faire le téléchargement), je voudrais faire un get à un serveur externe et être prêt à recevoir les résultats avec le code:

... 
m_nam = new QNetworkAccessManager(this); 
QNetworkReply *reply = m_nam->get(request); 
connect(m_nam, SIGNAL(finished(QNetworkReply *)), this, 
     SIGNAL(finished(QNetworkReply *))); 
... 

Mais je pourrais décider, avant la fin du téléchargement, que le résultat ne m'intéresse pas. Donc, je voudrais mettre en place un moyen de déconnecter la connexion d'un autre thread en émettant un signal do_abort().

Ce qui se propose est:

connect(this, SIGNAL(do_abort()), reply, SLOT(abort())); 

Mais je ne pense pas que cela fonctionne parce que abort n'est pas de fente QNetworkReply.

Alors, comment puis-je définir un mécanisme dans lequel je peux arrêter ce téléchargement à partir d'un autre thread? Je pourrais sous-classer QNetworkReply et donner à cette classe l'emplacement approprié. Mais j'aimerais comprendre la situation aussi.

Répondre

2

Vous n'avez pas besoin d'un thread de travail pour utiliser QNetworkAccessManager. Il est asynchrone, il est donc OK de l'utiliser depuis votre thread principal.

Dans QThread, vous implémentez un emplacement abortTheReply() et à l'intérieur de ce que vous faites m_reply-> abort(). Ensuite, vous connectez votre signal do_abort() à abortTheReply().