2009-02-11 19 views
45

En Windows hay algunas funciones prácticas como QueryPerformanceCounter de mmsystem.h para crear un temporizador de alta resolución. ¿Hay algo similar para Linux?Temporizador de alta resolución con C++ y Linux?

+0

http://stackoverflow.com/a/5524138/183120 (Cross-plataforma C++ 11 temporizador estándar de alta resolución) – legends2k

Respuesta

31

Ha sido asked before here - pero, básicamente, hay una función boost ptime que puede usar, o una función POSIX clock_gettime() que puede servir básicamente para el mismo propósito.

+0

Didn' Sé que Boost brinda funcionalidad de temporizador. Gracias :) – okoman

+1

O use el [HighResTimer] (http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html) de [ACE] (http: //www.cs.wustl. edu/~ schmidt/ACE.html) biblioteca. – lothar

+3

@lothar: +1 para el puntero a la biblioteca ACE, gracias. El enlace que proporcionó fue obsoleto, aquí hay uno nuevo: http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html –

29

Para Linux (y BSD) desea usar 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 
} 

Ver: This answer para más información

+6

clock_gettime (CLOCK_MONOTONIC, &ts); también funciona en Linux. – Maister

+7

Por supuesto , debe tener en cuenta la diferencia entre 'CLOCK_MONOTONIC' y' CLOCK_REALTIME' - el primero tiene su punto cero configurado en algo arbitrario al inicio del sistema, y ​​como tal solo es útil para comparaciones relativas entre dos mediciones 'CLOCK_MONOTONIC' (pero no se ve afectado por los ajustes de reloj de pared) – bdonlan

1

Para mi dinero, no es temporizador multiplataforma sin más fácil de usar que la clase de Qt QTime.

2

Con C++ 11, use std::chrono::high_resolution_clock.

Ejemplo:

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

de salida:

Delta t2-t1: 131 nanoseconds 
Cuestiones relacionadas