Qt

时间:2016-05-19 11:57:09

标签: c++ qt qtimer

在Ubuntu上,我正在使用Qt在C ++中开发一个应用程序。 我正在使用QTimer但它不够精确。我正在寻找分辨率优于毫秒的东西。有没有办法做到这一点?

我的代码:

temps= 0;
dataTimer = new QTimer();
connect(dataTimer, SIGNAL(timeout()), this, SLOT(simuler()));
dataTimer->start(1);

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 ProgrammingALP本书早于{{1} })