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 :

QThread et QMutex [QThread]


Sujet :

Multithreading

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 184
    Points : 409
    Points
    409
    Par défaut QThread et QMutex
    Bonjour,

    Je commence à suivre un tuto sur Qt (ici: [ame="http://www.youtube.com/watch?v=JaGqGhRW5Ks&list=SP2D1942A4688E9D63"]C++ Qt 28 - QThread part 1 creating a thread - YouTube[/ame]) les videos 28 à 30 parlent des threads et mutex.
    J'utilise la version 5 de Qt contrairement au tuto qui se base sur la 4.

    L'exemple en question est très basique, il s'agit d'une application console qui instancie trois threads qui contiennent une simple boucle qui va afficher nom du thread + itération.
    Dans la vidéo lorsque l'instructeur exécute le programme il obtient en output une ligne par instruction qDebug() << this->name << i; et ce qu'il utilise ou non un mutex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "mThread1" 938
    "mThread2" 944
    "mThread1" 939
    "mThread3" 912
    Chez moi avec ou sans le mutex certaines instructions se "chevauchent"... en gros << n'est pas atomique même avec mutex...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "mThread1" 9"mThread2"38  944
    "mThread1" 939
    "mThread3" 912
    fichier mythread.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef MYTHREAD_H
    #define MYTHREAD_H
    #include <QtCore>
     
    class MyThread:public QThread
    {
    public:
        MyThread();
        void run();
        QString name;
    };
     
    #endif // MYTHREAD_H
    fichier mythread.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include "mythread.h"
    #include <QtCore>
    #include <QDebug>
     
    MyThread::MyThread()
    {
    }
     
    void MyThread::run()
    {
        qDebug() << this->name << " Running";
        for(int i=0; i<1000; i++)
        {
            QMutex mutex;
            mutex.lock();
     
            qDebug() << this->name << i;
            mutex.unlock();
     
        }
    }
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <QCoreApplication>
    #include <mythread.h>
     
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        MyThread mThread1;
        mThread1.name = "mThread1";
        mThread1.start();
        MyThread mThread2;
        mThread2.name = "mThread2";
        mThread2.start();
        MyThread mThread3;
        mThread3.name = "mThread3";
        mThread3.start();
        return a.exec();
    }
    Ma question serai double: pourquoi cette différence de comportement sur ma machine et celle de la vidéo? Et pourquoi le mutex ne solutionne pas mon problème.

    Merci d'avance.

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Ton mutex doit être commun a chaque thread. Mets en variable membre ton mutex et mets le static. Je pense que cela devrait fonctionner.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

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

Discussions similaires

  1. [QThread] QProcess et QSemaphore
    Par slymira dans le forum Multithreading
    Réponses: 11
    Dernier message: 29/11/2007, 11h40
  2. [QThread] QThread qui fait figger le programme
    Par alpha_one_x86 dans le forum Multithreading
    Réponses: 1
    Dernier message: 29/11/2007, 10h16
  3. [QThread] ne marche pas
    Par alpha_one_x86 dans le forum Multithreading
    Réponses: 11
    Dernier message: 23/11/2007, 09h13
  4. [Thread] QThread et QSocket
    Par G3G3 dans le forum Multithreading
    Réponses: 7
    Dernier message: 30/10/2007, 20h25

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