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
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
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); }
Comment faire ?? Merci d'avance.
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
Partager