Qt中的亚毫秒计时器
Sub-millisecond timer in Qt
在Ubuntu上,我正在用Qt用C++开发一个应用程序。我正在使用QTimer
,但它不够精确。我正在寻找分辨率超过一毫秒的东西。有办法做到这一点吗?
我的代码:
temps= 0;
dataTimer = new QTimer();
connect(dataTimer, SIGNAL(timeout()), this, SLOT(simuler()));
dataTimer->start(1);
我相信在实践中,您不会可靠地为有用的操作获得亚毫秒的延迟(Linux桌面是而不是实时系统)。也许用CONFIG_PREEMPT
编译您自己的内核可能会有所帮助!但这是一个强大的限制(没有软件技巧可以克服这一点)。
正如Karsten Koop所评论的,您可能使用线程或POSIX定时器。另见时间(7)
正如Drop所评论的,如果您在C++11模式下编译,请考虑使用<chrono>
(它或多或少是以符合C++11的方式封装clock_gettime
;因此您将能够测量小延迟)。
Linux特定的解决方案可能是使用timerfd_create(2)并在Qt主循环中轮询该fd(使用QSocketNotificationer)
如果您只想以亚毫秒精度测量(而不是动作)时间,只需使用clock_gettime(2)
请注意,几个Qt操作非常复杂,需要超过一毫秒才能运行。人类无法感知(例如,在屏幕上看到)亚毫秒的延迟。屏幕刷新频率为60Hz(对于一些昂贵的屏幕,刷新频率为144Hz),因此您无法在屏幕上看到如此小的延迟。
如果您不熟悉Linux编程,请花时间阅读上面超链接材料的添加中的高级Linux编程(ALP书比timerfd_create
旧)
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- Qt按住鼠标按钮和计时器CPP
- QT精确的计时器计时精度
- 每个对象的C++Qt计时器
- 使用 QT 创建器中的计时器更改速度
- Qt中的亚毫秒计时器
- 在Qt中运行计时器5秒
- QT油漆工更新,计时器仅在关闭窗口时更新
- 在Qt中制作倒计时计时器
- Qt在计时器上更改图片
- 在性能关键软件(Qt)中使用计时器
- Windows(也包括OS X、Linux)上Qt中的高分辨率定期计时器
- 在Windows上更改Qt的计时器分辨率
- QT线程:获取QObject::startTimer:计时器无法从另一个线程启动警告