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 :

Interface figée pendant un QThread


Sujet :

Multithreading

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Interface figée pendant un QThread
    Bonjour à tous,

    Dans mon appli principale, j'ai créer un QThread pour déporté les calculs de mon algo sans pour autant figer l'interface quand celui ci s’exécute.

    Probleme : mon algo tourne bien mais mon appli se fige lors de l’exécution.

    Je n'y connais pas grand chose en multithreading mais normalement, mon PC étant dual core, le nouveau thread créer lors de l'éxécution de mon algo ne devrait-il pas etre déporté vers mon deuxieme coeur, pusique que le premier est utilisé par l'appli principale ?

    A noter que pendant que mon algo s'éxécute, je met à jour des données dans mon appli principale.

    Merci par avance de m'éclairer.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    Comment lance tu ton thread? peux tu montrer un peu de code?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	CLThread thread(this);//le thread de l'algo
     
    	QObject::connect(&thread, SIGNAL(UpdateState(int)), this, SLOT(UpdateFabInfos(int)) );//m-a-j de l'ihm pendant l'éxécution du thread
     
    	...//initialisation de paramètres
    	thread.run();
    Ce code est appelé via une connection signal/slot avec un QPushButton.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Ici tu as deux problème :
    1- il faut appeler start et non run (cf doc)
    2- la durée de vie de ton QThread va surement poser problème.


    Peux tu expliquer ce que fait ton thread et ce qu'i lmet à jour dans l'ihm ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ok pour start(), j'avais lu la doc, mais trop vite. je vais regarder si cela change quelquechose.

    Par contre, la durée de vie de mon thread ??
    En fait mon thread récupère des objets de la scene 3d de mon appli et créer des fichiers à partir de ces données. Donc en gros, j'en ai juste besoin localement.

    Pour ce qu'il met a jour c'est juste un QLabel et une QProgressBar pour voir ou on en est.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par nsarras Voir le message
    Par contre, la durée de vie de mon thread ??
    tu créé un thread dans une fonction. Une fois sortie de la fonction ton QTHread va être détruit même si l'opération est en cours....

    Citation Envoyé par nsarras Voir le message
    Pour ce qu'il met a jour c'est juste un QLabel et une QProgressBar pour voir ou on en est.
    Au lieu d'un thread, tu peux peut être utiliser QProgressDialog :
    http://qt.developpez.com/doc/latest/...tion-detaillee

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Alors j'ai maj mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	CLThread thread(this);
     
    	QObject::connect( &thread, SIGNAL(UpdateState(int)), this, SLOT(UpdateFabInfos(int)) );
    	QObject::connect( &thread, SIGNAL(finished()), this, SLOT(UpdateTrajIHM()) );
     
    	thread.start();
    	//thread.run();
    Mais mon run() n'est pas appelé par start(), j'ai pourtant suivis la doc Qt qui dit qu'il suffit de réimplémenter run().

    D'ou celà peut il venir ?

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par nsarras Voir le message
    D'ou celà peut il venir ?
    thread est détruit avant d'avoir réellement lancé le thread? (durée de vie)

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    réellement lancé le thread?
    Il n'est pas réellement lancé avec start(), j'avoue ne pas trop comprendre ?

    EDIT :

    Ok je pense avoir compris, il va falloir que je passe par un pointeur et que je garde une référence sur ce pointeur jusqu’à ce que mon traitement soit terminé.

    Merci de me corriger si ce n'est pas le cas.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par nsarras Voir le message
    Il n'est pas réellement lancé avec start(), j'avoue ne pas trop comprendre ?
    si mais le therad exécute ta fonction run de manière asychrone.

    Citation Envoyé par nsarras Voir le message
    Ok je pense avoir compris, il va falloir que je passe par un pointeur et que je garde une référence sur ce pointeur jusqu’à ce que mon traitement soit terminé.
    En gros oui.

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour tes explications

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

Discussions similaires

  1. Loader en GIF se fige pendant chargement JSP
    Par diabli73 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/11/2013, 19h14
  2. Pb interface figée
    Par Kroui dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 04/07/2011, 20h02
  3. Réponses: 4
    Dernier message: 04/03/2011, 16h18
  4. Mon ordinateur se fige pendant la défragmentation
    Par Ringard_Ringo dans le forum Windows XP
    Réponses: 6
    Dernier message: 10/04/2008, 20h51
  5. Rendre une interface inactive pendant l'exécution d'un programme
    Par ploukinet dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 21/05/2007, 16h25

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