簡體   English   中英

Linux / OSX Clock Resolution具有毫秒精度?

[英]Linux/OSX Clock Resolution with millisecond accuracy?

在Windows上,我可以調用QueryPerformanceCounter來獲取高分辨率數據點,但是此方法調用會受到BIOS,多核CPU和某些AMD芯片問題的影響。 我可以調用timeBeginPeriod將Windows中的系統時鍾分辨率降低到1ms(而不是標准的〜15ms),這意味着我可以只使用timeGetTime來獲取我指定的時鍾分辨率中的時間。

所以! 在OSX / Linux上,我應該期望什么C ++時鍾分辨率? 我能否獲得類似於Windows的1ms分辨率? 由於我正在使用實時媒體,因此我希望該時鍾分辨率盡可能低:我可以在內核中更改此值(例如在帶有timeBeginPeriod的Windows中)嗎? 這是一個高性能的應用程序,所以我想讓當前時間成為一個快速的函數調用。 而且我想知道時鍾通常是否漂移,或者我可以預期到什么奇怪的問題。

謝謝! 布雷特

如果您使用的是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發行版中使用。 它為您提供自紀元以來的時間(以秒和微秒為單位)。 分辨率未指定,但是在任何現代系統上,它至少應為您提供毫秒級的精度。

要補充David的答案,如果您不能使用C ++ 11,Boost的Timer類可以為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM