Code: Alles auswählen
class TestClass : public QThread {
private:
QNetworkAccessManager* manager;
QQueue<QString> downloadQueue;
void run() {
manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(downloadFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://www.testseite.de/index.html")));
exec();
}
private slots:
void downloadFinished(QNetworkReply*) {
// Starte neuen download falls noch links da sind
if (downloadQQueue.size() > 0) {
manager->get(QNetworkRequest(QUrl(downloadQueue.dequeue())));
}
// Hier bearbeite ich das reply und suche nach neuen links, die ich dann weiter laden will
downloadQueue.enqueue("neue links");
}
}
Ich habe jetzt veruscht durch einen QTimer das ganze wieder zu triggern falls die queue leer war. Da bekomme ich allerdings fehlermeldungen, dass der Timer nicht von einem anderen Thread gestartet und gestoppt werden kann. Den Timer hab ich sowohl in der run Methode als auch in der downloadFinished Methode erstellt. Geht beides nicht.
Wie gehts richtig?
Laufen die Funktionen die durch timeout() ausgelöst werdem in einem eigenständigen Thread?
Oder hat jemand eine andere Idee wie ich den Timer umgehen kann.