qt4下的定时器使用及精度评估

由于要使用定时器定时采集数据,想用qt的定时器采集1000hz的信号(qt的定时器精度位ms级)废话不多,先上代码如下:
timer_thread.h代码

#ifndef TIMER_THREAD_H
#define TIMER_THREAD_H
#include <QTimer>
#include <QThread>

class TimerThread : public QThread
{
    Q_OBJECT

public:
    TimerThread(QObject *parent = 0);
protected:
    void run();
private slots:
    void timeoutSlot();
private:
    QTimer* m_pTimer;
};

#endif // TIMERTHREAD_H

timer_thread.cpp代码:

#include "timer_thread.h"
#include <QDebug>
#include <QObject>
#include <QTimer>
#include <QDateTime>
TimerThread::TimerThread(QObject *parent):
    QThread(parent)
    {
    QTimer *m_pTimer = new QTimer(this);
    connect(m_pTimer,SIGNAL(timeout()), this,SLOT(timeoutSlot()));
    }

void TimerThread::run()
{
m_pTimer = new QTimer();
m_pTimer->setInterval(1);
connect(m_pTimer, SIGNAL(timeout()), this,SLOT(timeoutSlot()));
m_pTimer->start(2);
this->exec();
}

void TimerThread::timeoutSlot()
{
//qDebug()<<QString::fromLocal8Bit("当前线程id:") << QThread::currentThread();
qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzzz dddd");
//年-月-日 时:分:秒.毫秒 星期五
}

主函数代码:

 TimerThread *m_pThread = new TimerThread(this);   /*开启qt定时器,*/
  m_pThread->start();

下面进行测试:
10ms测试:
在这里插入图片描述
3ms测试:

在这里插入图片描述
1ms测试:
在这里插入图片描述
以上测试输出太多参数,现在只输出秒及秒以后的数据:
2ms测试:
在这里插入图片描述
1ms测试:

在这里插入图片描述
最后使用每1秒为单位输出一次,定时为1ms,
在这里插入图片描述

从测试结果可以看出,qt4的定时器能实现1ms定时,但这与应用的处理速度有关,即受CPU能力控制,而且也存在累计误差(连续输出十几秒后便出现误差),本人觉得qt5版本的定时结果就比较精准(没用qt5试过),具体参看
wsschat的博客
若有大牛知道如何提高qt4的定时精度,请赐教!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页