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