Bonjour,
Je lance plusieurs threads en parallèle qui travaillent à partir d'une liste. Cette liste est protégée par un QMutex, mais malgré cela mes quatre threads traitent la même première occurrence et ne vident pas la liste.
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 class Thread : public QThread { Q_OBJECT public: Thread(QStringList&, int); protected: void run(); private: QStringList Liste; int num_thread; volatile bool stopped; QMutex mutexListe;
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 Thread::Thread(QStringList & list, int i) { stopped = false; Liste = list; num_thread = i; } void Thread::run() { qDebug() << "Thread " << num_thread; forever { mutexListe.lock(); int nb; if (!Liste.isEmpty()) { QString jobname(Liste.first()); Liste.removeFirst(); nb = Liste.size(); mutexListe.unlock(); //Mon code QProcess qDebug() << "Taille liste = " << nb << " sur " << num_thread; qDebug() << "Lancement " << jobname << " sur " << num_thread;
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 #include <QApplication> #include "Thread.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); int noeuds(4); QStringList Liste; Liste << "SCD1LoadDimSSKsFromDimAndFact" << "SCD1LoadFactSSKs" << "SCD1LoadTargetTable" << "SCD1Lookups1" << "SCD1Lookups10" << "SCD1Lookups2"; for (int i(0) ; i < noeuds ; ++i) { Thread * un_thread; un_thread = new Thread(Liste, i); un_thread->start(); } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Thread 0 Thread 1 Thread 3 Thread 2 Taille liste = 5 sur 0 Taille liste = 5 sur 1 Taille liste = 5 sur 2 Taille liste = 5 sur 3 Lancement "SCD1LoadDimSSKsFromDimAndFact" sur 0 Lancement "SCD1LoadDimSSKsFromDimAndFact" sur 2 Lancement "SCD1LoadDimSSKsFromDimAndFact" sur 1 Lancement "SCD1LoadDimSSKsFromDimAndFact" sur 3
Partager