1 使用QT自带定时器timer进行定时处理,Timer在实现中有精度配置
第一个配置是高精度配置,try to keep 这个词用的很微妙,试图保持毫秒级别,代码入选
QTimer *timer_wave = new QTimer(this);
connect(timer_wave, &QTimer::timeout, this,[&](){
if(index == count)
{
timer_wave->stop();
loop.quit();
}
});
timer_wave->setTimerType(Qt::PreciseTimer);
timer_wave->setInterval(time);
timer_wave->start();
我使用10毫秒数据发送100000包数据,并且抓包,然后分析时间戳数据,分析每一包与第一包时间差并且减去等差数如图
纵坐标单位位秒,整体来看误差很小,但是局部误差还是比较大
2 实现高精度定时器我们还可以使用线程加延时的方式来进行,这种方式总体是可以进行把控。比较好理解。数据分析如下:
总体时间误差也是很少的,局部误差也很大。
从上面数据对比可以发现,都存在时间抖动,但是都有回归。我们常用的window系统是非实时系统,都会存在时间抖动,这个跟系统的性能和电脑任务状态存在一定关系.