Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    QNetworkAccessManager connecté qui ne semble pas envoyer son signal finished()
    Salut,

    J'ai écrit ce code et le retour terminal ne me plait pas :


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    void GetRSSThread::run()
    {
     
        AppVars::urlRSSlist << "http://rss.lemonde.fr/c/205/f/3050/index.rss";
        qDebug() << "enter run thread";
        Sleep(10000);
     
        QList<QNetworkAccessManager*> netManList;
        netManList<< new QNetworkAccessManager();
     
        connect (netManList[0], SIGNAL(finished(QNetworkReply*)), this, SLOT(downloadedRSSalaune(QNetworkReply*))) ;
     
        for(int i=0;i<AppVars::urlRSSlist.size();i++){
            qDebug() << "enter for loop for i = "+QString::number(i);
            netManList[i]->get(QNetworkRequest(QUrl(AppVars::urlRSSlist[i])));
        }
     
     
    start :
        qDebug() << "enter start loop thread";
        Sleep(20000);
        emit instantNews("monde","à l'autre bout du monde","http://www.google.fr");
        Sleep(5000);
        emit instantNews("monde","à l'autre bout du monde","http://www.google.fr");
    goto start;
    }
     
     
    void GetRSSThread::downloadedRSSalaune(QNetworkReply* reply){
     
        qDebug() << reply->errorString();
        qDebug() << "fichier recu";
        QByteArray data =QByteArray(reply->readAll());
    [...]
    }



    voila ce qu'affiche le terminal :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enter run thread
    "enter for loop for i = 0"
    enter start loop thread
    enter start loop thread
    enter start loop thread


    (d'ailleur c'est bizarre qu'il y est les guillemets pour "enter for loop for i = 0")

    enfin bon, downloadedRSSalaune(QNetworkReply* reply) n'est jamais executé

    What est da problemo ?

    NB : le code source de tout l'appli est là : https://sourceforge.net/projects/directnewsfrance/
    le fichier est getrssthread.cpp

  2. #2
    Membre régulier
    D'ailleur, je ne sais pas si c'est lié mais lorsque je rajoute this :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    netManList<< new QNetworkAccessManager(this);

    j'obtiens ce message d'erreur :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    QObject: Cannot create children for a parent that is in a different thread.
    (Parent is GetRSSThread(0x44f0f90), parent's thread is QThread(0x587668), current thread is GetRSSThread(0x44f0f90)



    et un peu plus d'nfo :
    AppVars::urlRSSlist est une QList<QString>
    la classe GetRSSThread dérive de QThread

  3. #3
    Membre régulier
    ok apparement, c'est très compliqué de passer par un thread pour faire du telechargement via QNetworkAccessManager, donc finalement je passe par ma QWidget.

    donc pas vraiment résolu parce que j'ai pris une alternative pour eviter de resoudre le probleme.

  4. #4
    Membre habitué
    Je pense que ton programme reste bloqué dans cette loop:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    start :
        qDebug() << "enter start loop thread";
        Sleep(20000);
        emit instantNews("monde","à l'autre bout du monde","http://www.google.fr");
        Sleep(5000);
        emit instantNews("monde","à l'autre bout du monde","http://www.google.fr");
    goto start;


    Supprime cette partie et vois si ca marche mieux ...
    goto est à bannir.

    PS: j'ai posé une question il y a quelque jour sur QNetworkAccessManager avec un exemple qui a marché à la fin:
    https://www.developpez.net/forums/d1...accessmanager/
    => Je pense que ca peut t'interesser