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 :
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
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
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 .
Partager