2009-02-11 34 views
45

在Windows下也有像QueryPerformanceCountermmsystem.h一些方便的功能來創建一個高分辨率計時器。 Linux有沒有類似的東西?使用C++和Linux的高分辨率定時器?

+0

http://stackoverflow.com/a/5524138/183120(跨平臺C++ 11標準高分辨率計時器) – legends2k 2013-05-15 14:17:05

回答

31

這是asked before here - 但基本上,有一個可以使用的boost ptime函數或POSIX clock_gettime()函數可以用於基本相同的目的。

+0

沒」 t知道Boost提供了定時器功能。謝謝:) – okoman 2009-02-11 20:33:24

+1

或從[ACE](HTTP使用[HighResTimer(http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html)://www.cs.wustl。 edu /〜schmidt/ACE.html)庫。 – lothar 2009-04-12 02:00:32

29

對於Linux(和BSD)要使用clock_gettime()

#include <sys/time.h> 

int main() 
{ 
    timespec ts; 
    // clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD 
    clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux 
} 

參見:This answer瞭解更多信息

1

對於我的錢,還有比Qt的QTime類不容易使用的跨平臺的定時器。

2

用C++ 11,使用std::chrono::high_resolution_clock

實施例:

#include <iostream> 
#include <chrono> 
typedef std::chrono::high_resolution_clock Clock; 

int main() 
{ 
    auto t1 = Clock::now(); 
    auto t2 = Clock::now(); 
    std::cout << "Delta t2-t1: " 
       << std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count() 
       << " nanoseconds" << std::endl; 
} 

輸出:

Delta t2-t1: 131 nanoseconds