Приостановка потока на n-ное количество времени

Иногда полезным действием является приостановка потока на некоторое время, например поток должен каждые 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(&amp;timer,SIGNAL(timeout()), &amp;loop, SLOT(quit())); 
// привязываем сигнал таймера к слоту loop'a
  connect(this,SIGNAL(PauseBreak()), &amp;loop, SLOT(quit()));
  
  while(true){
      
      
      
      
      //что-то делаем
      
      
      timer.start(300000); // запускаем таймер на 5 минут
      loop.exec(); // приостанавливаем поток
      timer.stop(); // останавливаем таймер

if(Exit){
return;
}
    } 
}

void ThreadSerfer::ExitThread(){
  Exit = 1;
  emit PauseBreak();
}

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *