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 :

Arrêt en cours d'exécution [QThread]


Sujet :

Multithreading

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 67
    Points
    67
    Par défaut Arrêt en cours d'exécution
    Bonjour,

    Ca fait quelque temps que je sèche sur un problème à mon avis bête...

    j'ai une classe generateur qui hérite que QThread cette classe redéfinit bien la méthode run.

    Lors que je lance mon thread avec la commande generateur->start tout fonctionne bien le déroulement ce passe bien etc etc...

    Mais lorsque je veux l'arrêter en cours d'execution ca ne fonctionne pas. Il finit le traitement. Si je fais un isRunning() ce me répond faux, mettre un boolean dans la condition d'une boucle ben ca change rein le boolean change pas d'état dans la fonction ...

    La seul différence de tout les codes que j'ai trouvé sur internet est que je n'ai pas de boucle infini et que je fais de la récursivité... mais je vois pas en quoi ce peut poser un problème.

    Première fois que je fais des thread en QT est-ce qu'il y a d'autre méthode a implémenter ? ou un mécanisme que j'aurais pas compris ?

    Merci d'avance pour vos idées.

  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
    tu est sur de tester le bon bool?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 67
    Points
    67
    Par défaut
    oui
    J'ai bien contrôlé cela. Le truc qui me surprend c'est que le résultat de isRunning() est faux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if (generateur->isRunning())
            {
                qDebug() << "Ca tourne" ;
            }
    La méthode pour changer le boolean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Generation::youStopNow()
    {
        mutex->lock();
        keepGoing = false;
        mutex->unlock();
    }
    mon test comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            for(int i = 0; i< vecCharac->size() && keepGoing ; i++)
            {
                mutex->unlock();
                if (keepGoing==false)
                {
                    qDebug()<< "yata";
                }
    le texte "yata" ne s'affiche jamais
    j'ai essaié avec des mutex mais ca change rien.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     for(int i = 0; i< vecCharac->size() && keepGoing ; i++)
            {
                mutex->unlock();
                if (keepGoing==false)
                {
                    qDebug()<< "yata";
                }
    donc tu ne risque pas de voire yatta

    pour le isRunning(), il te retourne faux quand?

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 67
    Points
    67
    Par défaut
    c'est bon j'ai trouvé

    je faisais des communications entre mon thread et le thread des events

    Et aussi merci pour l'aide apportée par les tutoriels et cours de formation pour apprendre Qt : http://qt.developpez.com/tutoriels/

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

Discussions similaires

  1. arrêt d'une requete en cours d'exécution
    Par fradeo dans le forum DB2
    Réponses: 8
    Dernier message: 21/06/2007, 10h44
  2. Savoir si une application est en cours d'exécution??
    Par Davidvb6 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 24/03/2006, 08h33
  3. [L&F]Modifier le L&F en cours d'exécution
    Par Pill_S dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/08/2004, 14h53
  4. Réponses: 2
    Dernier message: 29/01/2004, 11h05
  5. Réponses: 2
    Dernier message: 17/10/2002, 16h16

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