Transmission de variables
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:
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:
Code:
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);
}
}
} |
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 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:
Code:
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..
} |
et enfin main.cpp:
Code:
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();
} |
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 !).
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.