Gérer l'état d'exécution d'un QThread
Bonjour à tous,
Mon projet consiste à faire une interface graphique pour récupérer des données venant d'un matériel extérieur à un Ordinateur.
Pour ne pas freezer mon interface j'ai créé un QThread dans ma classe principale à partir de ma classe principale pour l'affichage.
Pour que ce thread ne se termine pas, j'ai mis un boucle do while() avec sleep pour la condition de non appel de fonction d'acquisition, d'attente si on préfère.
Lorsqu'on appuie sur un bouton d'acquisition, la variable "num_fonction_acq" passe de 1 à 4 selon les modes d'acquisitions.
Cette fonction est lancé après le start, je l'ai mise dans run().
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| void Communication_spectro::Acquisition()
{
do{
switch (num_fonction_acq) {
case 0:
Sleep(10000);
//this->wait(10000 = 100000000);
cout << "pause" << endl;
break;
cout << "essai1" << endl;
//Fonction d'acquisition du bruit
case 1:
//cout << "etape 1" << endl;
Acquisition_bruit();
num_fonction_acq = 0; //remise à zero d'une demande de fonction
emit(signal_acq_bruit()); //affichage des données à l'écran
//cout << "etape 2" << endl;
break;
//Fonction d'acquisition unique
case 2:
Acquisition_unique();
num_fonction_acq = 0;
break;
//Fonction d'acquisition unique + moyenne
case 3:
Acquisition_unique_nb_acq();
num_fonction_acq = 0;
break;
//Fonction d'acquisition continue
case 4:
Acquisition_continue();
num_fonction_acq = 0;
break;
default:
break;
}
}
while (stop_thread == 0);
//Fin de communication avec la spectromètre
DoubleArray_Destroy(spectrumArrayHandle);
DoubleArray_Destroy(wavelengthArrayHandle);
Wrapper_closeAllSpectrometers(wrapperHandle);
Wrapper_Destroy(wrapperHandle);
} |
Le but avec un thread permanent est de s'affranchir de la contrainte de temps que représente la création d'un connexion USB avec le matériel.
Comment est-ce que je pourrais faire afin de faire passer le QThread du mode sommeil avec Sleep() au mode Running?