comment lancer un programme dans un nouveau thread
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:
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:
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 :ccool:.