Bonjour à tous,

J'ai créer un petit programme en C++ et je l'ai interfacé avec Qt.
De manière synthétique, j'ai un bouton qui lance un algo. J'aimerais le lancer dans un thread différent de l'IHM pour éviter de "freezer" mon interface. J'ai fait une recherche sur Google et j'ai découvert QtConcurrent::run qui semble faire ce que je veux (voir ici). Cependant lorsque je lance ma fenêtre et que je clique sur mon bouton, j'obtiens un "RunTime Error".

Voici un résumé de mon code :

Voici mon header :
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
27
28
29
30
31
32
 
#ifndef FENPRINCIPALE_H
#define FENPRINCIPALE_H
 
#include <QPushButton>
#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QThread>
#include <QtConcurrentRun>
#include <QFuture>
#include <QFutureWatcher>
 
class FenPrincipale : public QMainWindow
{
     Q_OBJECT
 
     public:
        // Constructeur
        FenPrincipale();
 
        // Attributs
        QPushButton *bouton1;
 
        // Methodes
        void algo();
 
    // Slots
    public slots:
        void SlotAlgo();
};
#endif // FENPRINCIPALE_H
Voici mon .cpp :
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
27
 
#include "FenPrincipale.h"
 
FenPrincipale::FenPrincipale()
{
bouton1 = new QPushButton("Lancer algo");
QObject::connect(bouton1, SIGNAL(clicked()),this, SLOT(SlotAlgo()));
}
 
void FenPrincipale::algo()
{
   // time-consuming code
   double sum;
   for (int i=1; i<100000; i++)
   {
      for (int j=1; j<100000; j++)
      {
         sum = sum * i / j;
      }
   }
}
 
void FenPrincipale::SlotAlgo()
{
    QFuture<void> future=QtConcurrent::run(this,&FenPrincipale::algo);
    future.waitForFinished();
}

Pouvez-vous me dire s'il y a une erreur que je ne vois pas, notamment dans FenPrincipale::SlotAlgo() ?
Merci d'avance pour votre patience et votre aide .