最近需要使用QT5写个上位机串口助手,给嵌入式系统发送指令,时间要求比较短,需要22ms一次数据流。
在网上查阅资料后发现,QT有两种方法设置定时器:
1. QObject
2. QTimer
当然网上关于怎样使用这两个类的讲解很多,如:http://blog.csdn.net/andy_93/article/details/52776283。
然而一个比较尴尬的事情是,这两个定时器对于20ms以下的定时,工作的很好,对于20ms到30多ms却很糟糕,40ms以上又能正常工作。
这到底是什么鬼呢?
原来对于QT的定时器,有两种机制:
1. 当时间小于20ms时且系统支持多媒体计时器,QT将采用多媒体计时器;
2. 否则,QT使用普通定时器
22ms这个尴尬的时间正好使QT使用普通定时器,精度显而易见也就相差甚远了。
那就需要自己写个Timer类,来直接调用系统的多媒体计时器了。
代码:
在QT中添加头文件,mmtimer.h如下:
#i