Иногда полезным действием является приостановка потока на некоторое время, например поток должен каждые 5 минут обновлять статистику на веб-сервере, как всегда в гугле нет инфы по поводу как такое реализовать, поэтому предложу свой вариант.
Тут опять же нам пригодится QEventLoop для приостановки и QTimer для перезапуска, ниже небольшой пример с комментариями.
#ifndef THREADSERFER_H #define THREADSERFER_H #include <QObject> #include <QThread> #include <QEventLoop> #include <QTimer> class ThreadSerfer: public QThread { Q_OBJECT public: void run() override; void ExitThread(); ThreadSerfer(); private: bool Exit; signals: void PauseBreak(); public slots: }; #endif // THREADSERFER_H
#include "threadserfer.h" ThreadSerfer::ThreadSerfer() { } void ThreadSerfer::run(){ Exit = 0; QTimer timer; QEventLoop loop; connect(&timer,SIGNAL(timeout()), &loop, SLOT(quit())); // привязываем сигнал таймера к слоту loop'a connect(this,SIGNAL(PauseBreak()), &loop, SLOT(quit())); while(true){ //что-то делаем timer.start(300000); // запускаем таймер на 5 минут loop.exec(); // приостанавливаем поток timer.stop(); // останавливаем таймер if(Exit){ return; } } } void ThreadSerfer::ExitThread(){ Exit = 1; emit PauseBreak(); }
‘»!?-%s