Salut!
Je fais un petit programme avec Qt, ayant un thread principal (pour l'UI), et un thread pour le calcul.
Le problème est que mon thread dédié aux calculs manipule un tableau (via son pointeur), et que le thread principal doit afficher périodiquement les valeurs à l'écran.
Si j'utilise un QMutex dans le thread du calcul, puis-protéger les donnés liées aux pointeur?
voici le code du thread dédié aux calculs pour mieux vous expliquer mon problème:
et voici une portion de code de l'UI:
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
23
24
25
26 #define MAX 10 class Thread : public QThread { Q_OBJECT public: Thread(){for(int i=0; i<MAX; i++) x[i]=0;} private: int x[MAX]; QMutex mutex; signals: sendP(int*, int); protected: void run(){ for(;;) { QMutexLocker locker(&mutex); // Est-ce que x[0] à x[10] sont protégé? for(in i=0; i<MAX; i++) x[i]+=3; } emit sendP(x, MAX) } };
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 MainWidget::MainWidget(QWidget * parent) :QWidget(parent) { //... intialisation thread = new Thread; connect(thread, SIGNAL(sendP(int*, int)), this, SLOT(receiveP(int*, int))); thread->start(); //... } MainWidget::receiveP(int*x, int s) { for(int i=0; i<s; i++) qDebug() << x[i] // je dois avoir à l'écran 10 valeurs identiques }
Et si j'enlève le mutex de la classe Thread pour le mettre dans le slot receiveP(int*, int), cela marchera?
Merci
Partager