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

Qt Discussion :

problème multithread et Labels


Sujet :

Qt

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Par défaut problème multithread et Labels
    Bonjour et joyeux Noël tout le monde!

    Je développe en ce moment une application (sous windows et visual studio 2008) utilisant Qt pour faire un affichage graphique, et qui permet d'envoyer/recevoir des données avec un ordinateur distant (grâce à Wincock2), et qui dialogue aussi dans le même temps avec un petit robot.

    J'utilise 1 thread pour l'envoi de données, 1 thread pour la réception de données, et la thread principale s'occupe de Qt et du petit robot. (communication avec le robot et avec l'ordinateur distant en boucle) (multithread et sockets avec l'API windows)

    Après avoir reçu des données de l'ordinateur distant, je souhaite afficher ces données dans plusieurs QLabel:
    maFenetrePrincipale->monLabel->setText(QString(monTexteEnString.c_str()));

    Tout ceci se passe donc en boucle, mais le code plante de temps en temps à cet affichage.
    J'ai vérifié, il n'y a aucun problème avec ce string, juste l'affichage qui plante au bout d'un moment (ce qui me fait planter mon programme)


    Alors j'ai simplifié et testé le code pour avoir (dans un thread qui n'est pas celui qui fait tourner Qt):

    while(!demandeArret)
    {
    //(mon code pour recevoir des données+traitement)//Ca je n'ai pas touché

    maFenetrePrincipale->monLabel1->setText(QString("coucou"));
    maFenetrePrincipale->monLabel2->setText(QString("est"));
    maFenetrePrincipale->monLabel3->setText(QString("ce"));
    maFenetrePrincipale->monLabel4->setText(QString("que"));
    maFenetrePrincipale->monLabel5->setText(QString("ca"));
    maFenetrePrincipale->monLabel5->setText(QString("marche"));
    maFenetrePrincipale->monLabel6->setText(QString("maintenant"));
    maFenetrePrincipale->monLabel7->setText(QString("?"));
    }


    Ca marche quelques secondes, puis le programme plante.
    Si j'enlève ces setText, ça ne plante jamais...

    Alors ma question: pourquoi est-ce que ça plante?
    Est-ce parce que je demande l'affichage par un autre thread, même si dans le thread de Qt je ne touche jamais à ces labels?

    Merci pour toute aide

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Par défaut
    Bon très mauvaise méthode que j'avais faite donc.

    Au lieu de changer le texte des Qlabels grâce au thread qui m'apporte les données, je récupère les données sur un thread, et mets les données dans les Qlabels grâce à un Qtimer qui me les met à jour toutes les 50ms par exemple.

    Ca marche très bien comme ça, désolé pour ma nullité et aussi pour vous avoir embêtés avec cette question

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème multithreading Directx
    Par hedisurfer dans le forum DirectX
    Réponses: 47
    Dernier message: 22/03/2010, 18h18
  2. Problème avec gtk.Label
    Par velight dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 14/11/2009, 10h42
  3. [XHTML 1.0] Probléme de ID LABEL sur SELECT
    Par Faiche dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/06/2009, 11h05
  4. Problème jar executable + label et images
    Par Copernic09 dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 15/05/2007, 17h57
  5. [Visual Editor] problème avec les Label
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/08/2005, 12h30

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