[Débutant] Mutex et pointeurs
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:
Code:
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)
}
}; |
et voici une portion de code de l'UI:
Code:
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