Bonjour,
je m'appuie sur l'article https://mayaposch.wordpress.com/2011...l-explanation/ pour travailler sur les threads dans Qt.
Dans mon application, un thread secondaire reçoit des données du réseau et doit mettre à jour l'IHM.
Dans un premier temps, mon appli "test unitaire" fonctionne correctement (mise à jour périodique d'un label sur l'ihm) mais je n'arrive pas à stopper proprement le thread à l'appui sur un bouton stop.
Code côté thread principal:
Code côté thread secondaire:
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 //Gestion sur le clic du bouton start void MainWindow::start_thread() { QThread* thread = new QThread; WorkerThread* worker = new WorkerThread(); worker->moveToThread(thread); //connecter le signal plus du worker au slot plus de mainWindow pour rafraîchir l'ihm connect(worker, SIGNAL(plus()), this, SLOT(plus())); connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString))); //Qd le thread démarre, il démarre le workerthread connect(thread, SIGNAL(started()), worker, SLOT(process())); //Qd le workerthread s'arrête, il stoppe le thread connect(worker, SIGNAL(finished()), thread, SLOT(quit())); connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater())); connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); //c'est ce connect qui ne semble pas fonctionner... connect(this, SIGNAL(stopThread()), worker, SLOT(running())); thread->start(); } // Clic sur le bouton stop. Stop le thread démarré par start_thread(). void MainWindow::stop_thread() { emit stopThread(); }
Je pense que le signal stopThread est émit mais à priori je ne passe jamais dans la méthode running().
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 //le job dans le thread void WorkerThread::process() { while(continuer == true) { emit plus(); //destination du thread ui pour rafraîchissement QThread::sleep(1); } emit finished(); //à destination du QThread } //connectée au signal stopThread du thread ui void WorkerThread::running() { continuer = false; }
Si vous voyez d'où vient le problème, merci.
Partager