IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Multithreading Discussion :

Gros probleme pthread et Qt


Sujet :

Multithreading

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Par défaut Gros probleme pthread et Qt
    Bonjour,

    Voila ça fait 2 jours que j'essaie mais rien n'y fait -__-
    J'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void Action::GoRequetteHttp()
    {
            manager = new QNetworkAccessManager();
    	    file    = new QFile(QString("index.php"));
    	    url     = QUrl("http://qt.developpez.com/");
     
    	    this->file->open(QIODevice::WriteOnly);
                this->reply = manager->get(QNetworkRequest(this->url));
     
                QObject::connect(this->reply, SIGNAL(finished()), this, SLOT(AfficherResultatHttp()));
    }
    GoRequetteHttp() étant une fonction dans un thread (la lib utilisé et pthread).
    Mon soucis étant que quand je lance une action la fonction et bien exécuté dans le thread mais le SIGNAL n'est jamais envoyé !

    Action .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            QNetworkAccessManager *manager;
            QUrl                  url;
            QFile                 *file;
            QNetworkReply         *reply;
     
        public slots:
            void AfficherResultatHttp();
    A oui et quand je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     manager = new QNetworkAccessManager(this);
     file        = new QFile(QString("index.php"), this);
    Dans la console j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QObject: Cannot create childen for a parent that is in a different thread.
    (Parent is Action(0x67d8a0), parent's thread is QThread(0x673348), current thread is QThread(0x1470b70)
    Je sais même pas pourquo il me parle de Qthread alors que je ne l'utilise même pas

    Merci grandement de votre aide

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    et pourquoi ne pas utiliser QThread justement ? C'est quand même sacrément plus pratique que pthread.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Par défaut
    pthread me parait plus simple non ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Citation Envoyé par lirycs78 Voir le message
    pthread me parait plus simple non ?
    Si tu programme en C je veux bien te croire
    Mais en POO sa me parait plutôt douteux

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut. Les classes Qt qui dérivent de QObject et qui as un fonctionnement asynchrone ont besoin de QThread, et en particulier l'eventloop lancer dans une QThread.
    Or pthread ne fait pas cela.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Par défaut
    Ce qui signifie ?

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par lirycs78 Voir le message
    Ce qui signifie ?
    ben que tu n'as pas le choix. Il te faut utiliser QThread si tu veut utiliser les classes qui dérivent de QObject.

    Es tu sure que tu as besoin de thread? QNetworkAccessManager à un fonctionnement asynchrone, qui évite justement l'utilisation de thread dans la très grande majorité des cas.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Par défaut
    oui oui certain. Merci pour cette indication, mais je n'est aucune idée de comment utiliser QThread. J'ai cherche des tutos mais je n'est pas trouver

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Pour utiliser QThread (ainsi que la plupart des classes qui implémente des thread) il faut que tu créés une classe qui hérite de QThread et que tu ré-implémente la méthode void run() en suite quand dans ton code tu exécutera monThread.start() le thread se lancera et exécutera la fonction run() en parallèle.

    Tu peut allé voir la FAQ pour plus d'info.

Discussions similaires

  1. [D8][FK1.1] Gros Probleme avec le framewok !!!!
    Par ghor_bey dans le forum Delphi .NET
    Réponses: 7
    Dernier message: 04/08/2005, 09h08
  2. Petite aide pour gros problème : libstdc++
    Par Info-Rital dans le forum Linux
    Réponses: 5
    Dernier message: 30/08/2004, 19h17
  3. gros problemes de texturages...
    Par aguion dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/06/2004, 11h02
  4. Gros problème avec JB8 et appli J2EE
    Par patbier dans le forum JBuilder
    Réponses: 10
    Dernier message: 07/03/2003, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo