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 : 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)
    }
};
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
 
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