Bonjour,
je travail sur un projet d'acquisition de données à partir d'un carte PCI.
Les fonctions données dans le SDK de la carte me permettent de réceptionner un buffer de données dès qu'un déclencheur (trigger) est atteint.
L'acquisition de ces données se fait grâce à la fonction qu'on apellera XDA_Get().
Lorsque cette fonction est appelée, elle attend (indéfiniment) jusqu'à ce que le déclencheur soit atteint.
Etant donnée que cette acquisition doit se faire indéfiniment, je l'ai mise dans une boucle infinie, dans un QThread.
Mon problème est maintenant d'arrêter proprement ce thread afin que je puisse couper l'acquisition, et lancer une petite fonction (propre à l'utilisation de cette carte) juste avant l'arrêt du thread.
J'ai essayé quit() mais ça ne s'arrête pas, et terminate() est largement déconseillé pour ce genre d'utilisation, même si cela fonctionne.
Comment puis-je lancer une fonction lors de l'arrêt d'un thread ?
Comment puis-je stopper mon thread proprement ?
Les slots pourraient-ils m'aider à exécuter une fonction juste avant de stopper le thread ?
Voici mon fichier analyse.cxx
analyse.hxx
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 #include "analyse.hxx" #include <QDebug> #include <QThread> #include "./Include/XDADAQ.h" #include <iostream> using namespace std; Analyse::Analyse(QThread * parent) : QThread(parent) {} void Analyse::run() { cout << "[Acquisition]" << endl; acquisition(); } void acquisition() { do { /* Parametrage */ XDA_Get(); //Attente du trigger }while(true); }
Merci beaucoup !
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 #ifndef ANALYSE_H #define ANALYSE_H #include <QThread> #include "./Include/XDADAQ.h" class Analyse : public QThread { Q_OBJECT protected: void run(); public: /* Constructeur */ Analyse(QThread * parent = 0); ~Analyse(){} }; #endif // ANALYSE_H
Partager