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旧)

最新更新