Bonjour à tous,
j'aimerai avoir un coup de main sur la fonctionnalité du thread sur QT. En effet, je suis sur un programme permettant de recevoir des données depuis un port série. J'ai besoin d'exécuter une tache en parallèle, et j'ai donc décidé d'utiliser le Thread.
Mon problème est que dans ce Thread, j'ai besoins d'une variable qui est utilisé dans mon MainWindow (Variable de type HANDLE qui me permet de me connecter au port série), et je n'arrive pas à la récupérer..
Voici les parties du code qui seront utiles pour résoudre mon problème:
threadevent.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 #ifndef THREADEVENT_H #define THREADEVENT_H #include <QThread> #include "mainwindow.h" class ThreadEvent : public QThread { Q_OBJECT public: void run(); //signals: // void arg(HANDLE hSerial); //Ceci est ce que j'avais trouvé sur internet //mais je n'ai pas réussi à l'utiliser }; #endif // THREADEVENT_H;
threadevent.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 #include "threadevent.h" #include "mainwindow.h" void ThreadEvent::run() { DWORD dwBytesRead; unsigned char *szBuff; printf("je rentre dans le thread"); while (1) { if(ReadFile(hSerial, szBuff, 1, &dwBytesRead, NULL)) { printf(" buffer de reception %ld bytes: \n\n %s\n\n\n", dwBytesRead, szBuff); } } }
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 class MainWindow : public QMainWindow { Q_OBJECT public: .... unsigned char *szBuff; DWORD dwBytesRead; HANDLE hSerial; .... //signals: //void arg_thread(HANDLE hSerial); //Ceci est ce que j'avais trouvé sur internet mais je n'ai pas réussi à l'utiliser private: Ui::MainWindow* ui; public slots: ..... private slots: ..... }; #endif // MAINWINDOW_H
mainwindow.cpp:
et enfin main.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); .... // Je suppose qu'ici il y aura le traitement du signal a envoyer.. }
Voila, mon problème vient donc de la fonction ReadFile dans mon run(), que je ne peux pas utiliser puisque le hSerial n'est pas reconnu et donc il ne sait pas sur quel port lire.. (Je ne peux d'ailleurs pas compiler le projet à ce moment puisque la variable hSerial de run() n'éxiste pas !).
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 #include <QtGui/QApplication> #include "mainwindow.h" #include "threadevent.h" void interrupt(HANDLE hSerial, unsigned char *szBuff, DWORD dwBytesRead); int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); ThreadEvent thread; thread.start(); return a.exec(); }
Sinon, l'appel au Thread fonctionne correctement lorsque je remplace le contenu par un simple printf afin de vérifier si le fonctionnement est correcte..
Je fais donc appelle à vous, car cela est très important et j'ai grandement besoins de votre aide !
Bien cordialement, Tony.
Partager