在Windows上,我可以调用QueryPerformanceCounter来获取高分辨率数据点,但此方法调用会受到BIOS,多核CPU和某些AMD芯片问题的影响。我可以调用timeBeginPeriod将Windows中的系统时钟分辨率提高到1ms(而不是标准的〜15ms),这意味着我只能使用调用timeGetTime并获得我指定的时钟分辨率的时间。
原来如此!在OSX / Linux上,我应该期待什么C ++时钟分辨率?我能获得与Windows类似的1ms分辨率吗?由于我正在做实时媒体,我希望这个时钟分辨率尽可能低:我可以在内核中更改这个值(比如在Windows中使用timeBeginPeriod)吗?这是一个高性能的应用程序,所以我想让当前时间成为一个快速的函数调用。而且我想知道时钟是否会漂移或者我可以期待什么奇怪的问题。
谢谢! 布雷特
答案 0 :(得分:7)
如果您使用的是C ++ 11,则可以使用std::chrono::high_resolution_clock
,它可以为您提供系统提供的高分辨率时钟。要获得毫秒的持续时间,你可以
typedef std::chrono::high_resolution_clock my_clock;
my_clock::time_point start = my_clock::now();
// Do stuff
my_clock::time_point end = my_clock::now();
std::chrono::milliseconds ms_duration =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
如果您不使用C ++ 11,则gettimeofday
函数可在OSX和大多数Linux发行版中运行。它提供了自纪元以来的时间,以秒和微秒为单位。分辨率未指定,但它应该在任何现代系统上至少提供毫秒精度。
答案 1 :(得分:2)
要添加大卫的答案,如果你不能使用C ++ 11,Boost的Timer课程可以帮助你。