Bonjour à tous,
Je viens vers vous car je n'ai pas trouvé de réponse à cette question :
- Comment faire un thread avec un timeout
Après quelques recherches je ne comprend pas pourquoi le code suivant ne fonctionne pas (pourquoi le timeout n'apparait pas).
main.cpp
Worker.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <QCoreApplication> #include "worker.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Worker worker; worker.start(); worker.wait(); return a.exec(); }
Worker.cpp
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 #ifndef WORKER_H #define WORKER_H #include <QObject> #include <QThread> class QTimer; class Worker : public QThread { Q_OBJECT public: Worker(QObject *parent = nullptr); private slots: void handlerTimer(); protected: void run(); private: QTimer *_timer; bool _isFinish; }; #endif // WORKER_H
Merci d'avance pour vos réponses.
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
30
31
32
33
34
35
36
37
38
39 #include "worker.h" #include <QTimer> #include <QDebug> Worker::Worker(QObject *parent) : QThread(parent), _timer(new QTimer()), _isFinish(false) { _timer->moveToThread(this); _timer->setInterval(1000); _timer->setSingleShot(true); QObject::connect(_timer, &QTimer::timeout, this, &Worker::handlerTimer); } void Worker::run() { qDebug() << "Debut de la thread"; _timer->start(); int counter = 0; while(counter < 5 && _isFinish == false) { counter++; qDebug() << "Counter:" << counter; this->msleep(500); } qDebug() << "Fin de la thread"; } void Worker::handlerTimer() { _isFinish = true; qDebug() << "Timeout"; }
Cordialement
Partager