我正在使用C++和Qt构建一个系统仿真器,用于UI、事件处理等方面。显然,我需要一个准确的时间参考。目前,我使用适当间隔(NTSC为16.66667毫秒,PAL为20毫秒)的QTimer,但正如预期的那样,其精度非常差。有时计时器以50FPS触发,有时以120FPS触发。
我知道大多数操作系统都有一些函数可以提供准确到微(或纳)秒级别的时间戳。(例如Windows上的QueryPerformanceCounter)。
除了使用系统钟表外,我还考虑过同步音频时钟,因为我已经有一个音频输出流,但我不认为Qt提供这样的功能。
从C++/Qt中,最容易(和/或最佳)的方法是什么,可以同步到某个准确的时钟,在正常情况下具有较少的抖动,并在特定时间间隔内调用函数?
我知道大多数操作系统都有一些函数可以提供准确到微(或纳)秒级别的时间戳。(例如Windows上的QueryPerformanceCounter)。
除了使用系统钟表外,我还考虑过同步音频时钟,因为我已经有一个音频输出流,但我不认为Qt提供这样的功能。
从C++/Qt中,最容易(和/或最佳)的方法是什么,可以同步到某个准确的时钟,在正常情况下具有较少的抖动,并在特定时间间隔内调用函数?
usleep
和msleep
具有相同的默认分辨率:15毫秒。当您使用短超时时间触发计时器时,Qt将全局窗口计时器间隔切换为1毫秒,以换取计时器准确性而牺牲功耗。不存在所谓的“事件循环”。每个线程都有自己的事件循环。没有人强制您在GUI事件循环中运行计时器,可以在单独的高优先级线程中运行它们。 - Kuba hasn't forgotten Monica