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.
Chez moi avec ou sans le mutex certaines instructions se "chevauchent"... en gros << n'est pas atomique même avec mutex...Code:
1
2
3
4
5 "mThread1" 938 "mThread2" 944 "mThread1" 939 "mThread3" 912
fichier mythread.h:Code:
1
2
3
4 "mThread1" 9"mThread2"38 944 "mThread1" 939 "mThread3" 912
fichier mythread.cpp:Code:
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
main.cppCode:
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(); } }
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.Code:
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(); }
Merci d'avance.