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![]()
Partager