[QThread] créer un thread
Bonjour à tous,
Je me suis récemment mis à QT, et là j'en bave convenablement pour faire du multi-threading...
En C++ (sans QT), j'utilisais PThread, et tout marchait... j'ai essayé dans QT, et ça ne marchait plus... alors j'ai vu qu'il y avait la bibliothèque QThread, mais malheureusement, je ne comprends rien à la doc :'(
Mon problème : j'ai une application qui réalise un gros calcul (très long, qui peut durer des minutes :s) dès qu'on clique sur un bouton... La connection marche niquel, mais au bout de quelques secondes, Windows me dit que mon application ne répond plus... ça m'embête... euh ... beaucoup ^^
J'ai vu qu'en faisant du multi-threading on pouvait résoudre ce problème... Mais comment ???
Voici une partie de mes sources :
mainwindow.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 28 29 30 31 32
| #include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
#include <QComboBox>
using namespace std;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindowClass)
{
ui->setupUi(this);
QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(search()));
QObject::connect(ui->parcourir, SIGNAL(clicked()), this, SLOT(ouvrirDialogue()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::search()
{
// ma phase de calcul
}
void MainWindow::ouvrirDialogue()
{
QString fichierSelectionne = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Tous (*.*)");
ui->fichier->setText(fichierSelectionne);
} |
mainwindow.h
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
| #ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
namespace Ui
{
class MainWindowClass;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindowClass *ui;
private slots:
void search();
void ouvrirDialogue();
};
#endif // MAINWINDOW_H |
Comment faire ?? Merci d'avance.