qt 所有的 timer 是排队运行的。
每次执行 timer 之前,取一次系统时间。然后依次执行所有到时间的 timer.
所以,估计是你这个程序在主线程里面占用了太多时间。
我以前看着 qt 的源码写过一个山寨版的,你可以参考一下:
github_dot_com/hgoldfish/qtnetworkng/blob/master/src/eventloop_win.cpp#L654
如果你这个处理过程占用太多时间,可以考虑触发事件后,做个标志位,用 QTimer::singleShot(0) 再次调用一下。或者把事件处理放到子线程或者启动个协程去处理。这样子时间就会准过来了。
【 在 brick 的大作中提到: 】
: 最近在ubuntu系统下调试一个程序。这个程序里之前有好几个qtimer,我为了调试需要又加了一个qtimer,定时10秒,在对应的响应函数中,用系统时间打印定时器响应的间隔,最多就是二三十微秒的误差。
: 后来自己写了个新的程序,没有其他功能,就是个对qtimer的响应,但是它的响应时间能到百微秒、千微秒甚至万微秒量级的误差。
: 然后我把之前那个程序里原有的qtimer都停了,只留了我新加的qtimer,结果它的响应时间误差也明显变大了,百到千微秒量级。
: ...................
--
修改:hgoldfish FROM 120.41.147.*
FROM 120.41.147.*