2009-02-11 22 views
45

W Windowsie jest kilka przydatnych funkcji, takich jak QueryPerformanceCounter z mmsystem.h, aby utworzyć zegar o wysokiej rozdzielczości. Czy jest coś podobnego w Linuksie?Zegar wysokiej rozdzielczości z C++ i Linux?

+0

http://stackoverflow.com/a/5524138/183120 (Cross platforma C++ 11 standardowych wysokiej rozdzielczości zegar) – legends2k

Odpowiedz

31

To była asked before here - ale w zasadzie jest dostępna funkcja doładowania ptime, lub funkcja POSIX clock_gettime(), która może służyć w zasadzie do tego samego celu.

+0

wstałem t wiedzą, że Boost zapewnia funkcjonalność timera. Dziękuję :) – okoman

+1

Lub użyj [HighResTimer] (http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html) z [ACE] (http: //www.cs.wustl. edu/~ schmidt/ACE.html). – lothar

+3

@lothar: +1 dla wskaźnika do biblioteki ACE, dziękuję. Link, który podałeś, był nieaktualny, oto nowy: http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html –

29

Dla systemu Linux (i BSD), który chcesz użyć 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 
} 

Patrz: This answer więcej informacji

+6

clock_gettime (CLOCK_MONOTONIC, &ts); działa również w Linuksie – Maister

+7

Oczywiście , musisz zdawać sobie sprawę z różnicy między 'CLOCK_MONOTONIC' i' CLOCK_REALTIME' - pierwsza z nich ma ustawiony punkt zerowy na coś arbitralnego przy starcie systemu, i jako taka jest przydatna tylko do względnych porównań między dwoma pomiarami "CLOCK_MONOTONIC" (ale nie ma wpływu na regulacje ścienne) – bdonlan

1

Za moje pieniądze, nie ma łatwiejszy w obsłudze zegar wieloplatformowy niż QTime klasy Qt.

2

W C++ 11 użyj std::chrono::high_resolution_clock.

przykład:

#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; 
} 

wyjściowa:

Delta t2-t1: 131 nanoseconds 
Powiązane problemy