1

在 Windows 上,我可以调用 QueryPerformanceCounter 来获取高分辨率数据点,但是这个方法调用会受到 BIOS、多核 CPU 和一些 AMD 芯片问题的影响。我可以调用 timeBeginPeriod 将 Windows 中的系统时钟分辨率提高到 1 毫秒(而不是标准的 ~15 毫秒),这意味着我可以只使用调用 timeGetTime 并以我指定的时钟分辨率获取时间。

所以!在 OSX/Linux 上,我应该期待什么样的 C++ 时钟分辨率?我可以获得类似于 Windows 的 1ms 分辨率吗?由于我在做实时媒体,我希望这个时钟分辨率尽可能低:我可以在内核中更改这个值(比如在 Windows 中使用 timeBeginPeriod)吗?这是一个高性能的应用程序,所以我想让当前时间成为一个快速的函数调用。而且我想知道时钟是否通常会漂移或我会遇到什么奇怪的问题。

谢谢!布雷特

4

2 回答 2

8

如果您使用的是 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 发行版。它以秒和微秒为单位为您提供自纪元以来的时间。分辨率未指定,但它应该在任何现代系统上为您提供至少毫秒级的精度。

于 2012-07-07T20:57:46.667 回答
2

为了补充大卫的答案,如果您不能使用 C++11,Boost 的Timer类可以帮助您。

于 2012-07-07T21:29:09.760 回答