2012-07-07 121 views
0

在Windows上,我可以調用QueryPerformanceCounter獲取高分辨率數據點,但此方法調用受BIOS,多核CPU和某些AMD芯片問題影響。我可以調用timeBeginPeriod將Windows中的系統時鐘分辨率提高到1ms(而不是標準〜15ms),這意味着我可以只使用timeGetTime並在我指定的時鐘分辨率中獲得時間。Linux/OSX時鐘分辨率精確到毫秒級?

所以!在OSX/Linux上,我應該期待什麼C++時鐘分辨率?我可以獲得1ms分辨率與Windows相似嗎?由於我在做實時媒體,我希望這個時鐘分辨率儘可能低:我可以在內核中更改此值(如在Windows中使用timeBeginPeriod)嗎?這是一個高性能的應用程序,所以我想讓當前的時間成爲一個快速的函數調用。我想知道時鐘是否會漂移,或者我可以期待什麼奇怪的問題。

謝謝! Brett

回答

7

如果您使用的是C++ 11,您可以使用std::chrono::high_resolution_clock,它應該爲您提供系統提供的高分辨率時鐘。爲了得到一個毫秒時間。如果你不使用C++ 11你會做

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); 

那麼gettimeofday功能在OSX工作和大多數Linux發行版。它以秒和微秒爲單位給出了自紀元以來的時間。分辨率沒有明確規定,但它應該在任何現代系統上至少提供毫秒級的精度。

2

要添加到David的答案,如果您不能使用C++ 11,Boost的Timer類可以幫助您。