在Ubuntu上,我正在使用Qt在C ++中开发一个应用程序。
我正在使用QTimer
但它不够精确。我正在寻找分辨率优于毫秒的东西。有没有办法做到这一点?
我的代码:
temps= 0;
dataTimer = new QTimer();
connect(dataTimer, SIGNAL(timeout()), this, SLOT(simuler()));
dataTimer->start(1);
答案 0 :(得分:3)
我相信在实践中有用的操作 可靠会延迟亚毫秒延迟(Linux桌面不真实 - 时间系统)。也许使用CONFIG_PREEMPT
编译自己的内核可能会有所帮助!但这是一个很大的限制(并且没有软件技巧可以克服这一点)。
如Karsten Koop所述,您可以使用线程或POSIX定时器。另请参阅time(7)
如Drop所述,如果您在C ++ 11模式下编译,请考虑使用<chrono>
(它或多或少以符合C ++ 11的方式包装clock_gettime
; sou你将能够衡量小延迟)。
特定于Linux的解决方案可能是使用timerfd_create(2)并在Qt主循环中轮询该fd(使用QSocketNotifier)
如果您只想以亚毫秒精度衡量(而不是 act )时间,只需使用clock_gettime(2)
请注意,几个Qt操作非常复杂,需要运行超过一毫秒。并且人类无法感知(例如,在屏幕上看到)亚毫秒延迟。屏幕以60Hz(或某些昂贵的屏幕为144Hz)刷新,因此您无法看到如此小的延迟。
如果您不熟悉Linux编程,请花时间阅读上面超链接材料的添加中的Advanced Linux Programming(ALP本书早于{{1} })