在Qt子執行緒中使用定時器
阿新 • • 發佈:2019-01-08
專案中遇到了在Qt的一個子執行緒中使用定時器,
現在記錄一下:
這裡vacDealThread是一個繼承QTread的類,裡面有個QTimer*型別的成員變數m_timer,
然後重寫它的run方法,
在裡面使用定時器的時候,有兩點需要注意:
1:new QTimer()時不能加this;
2:在run()方法裡一定要加上this.exec();
程式碼如下:
vacDealThread.h
#ifndef VACDEALTHREAD_H #define VACDEALTHREAD_H #include <QTimer> #include <QThread> class vacDealThread : public QThread { Q_OBJECT private: QTimer *m_timer; public: ~vacDealThread() { if(m_timer != null) delete m_timer; } void run(); }; #endif
vacDealThread.cpp
#include "vacDealThread.h" void vacDealThread::OndealData() { } void vacDealThread::run() { //不能加this m_timer = new QTimer(); m_timer->setInterval(90); connect(m_timer, &QTimer::timeout, this, &vacDealThread::OndealData); m_timer->start(); //一定要有exec() this->exec(); }
當呼叫了start()子執行緒啟動了之後,每隔一段時間在子執行緒中便會執行OndealData函數了。