具有毫秒精度的 Linux/OSX 时钟分辨率?
Posted
技术标签:
【中文标题】具有毫秒精度的 Linux/OSX 时钟分辨率?【英文标题】:Linux/OSX Clock Resolution with millisecond accuracy? 【发布时间】:2012-07-07 20:37:05 【问题描述】:在 Windows 上,我可以调用 QueryPerformanceCounter 来获取高分辨率数据点,但此方法调用会受到 Bios、多核 CPU 和某些 AMD 芯片问题的影响。我可以调用 timeBeginPeriod 将 Windows 中的系统时钟分辨率提高到 1 毫秒(而不是标准的 ~15 毫秒),这意味着我可以只使用调用 timeGetTime 并以我指定的时钟分辨率获取时间。
所以!在 OSX/Linux 上,我应该期待什么样的 C++ 时钟分辨率?我可以获得类似于 Windows 的 1ms 分辨率吗?由于我正在做实时媒体,我希望这个时钟分辨率尽可能低:我可以在内核中更改这个值(比如在 Windows 中使用 timeBeginPeriod)吗?这是一个高性能的应用程序,所以我想让当前时间成为一个快速的函数调用。而且我想知道时钟是否通常会漂移或我会遇到什么奇怪的问题。
谢谢! 布雷特
【问题讨论】:
【参考方案1】:如果您使用的是 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 发行版中使用。它以秒和微秒为单位为您提供自纪元以来的时间。分辨率未指定,但在任何现代系统上,它都应该能提供至少毫秒级的精度。
【讨论】:
【参考方案2】:补充大卫的回答,如果你不能使用 C++11,Boost 的 Timer 类可以帮助你。
【讨论】:
您好,我也有类似的需求。在 Windows 中,我在我的高性能应用程序中使用 timeBeginPeriod 和 timeEndPeriod。现在,可以在 Linux 中使用上述两个 Windows API 给出的 1 毫秒时钟分辨率。上述使用 chrono:: high_resolution_clock 的解决方案是否可以正常工作?或者现在是否有任何新的解决方案或解决方法可以在 Linux 中实现这一点。以上是关于具有毫秒精度的 Linux/OSX 时钟分辨率?的主要内容,如果未能解决你的问题,请参考以下文章