2010-08-03 18 views
5

Tengo curiosidad por saber si hay una función incorporada en C++ para medir el tiempo de ejecución? Estoy usando Windows en este momento. En Linux es bastante fácil ...find C++ tiempo de ejecución

Respuesta

4

La mejor manera en Windows, hasta donde yo sé, es usar QueryPerformanceCounter y QueryPerformanceFrequency.

QueryPerformanceCounter(LARGE_INTEGER*) coloca el valor del contador de rendimiento en LARGE_INTEGER pasado.

QueryPerformanceFrequency(LARGE_INTEGER*) coloca la frecuencia en que el contador de rendimiento se incrementa en el LARGE_INTEGER pasado.

A continuación, puede encontrar el tiempo de ejecución registrando el contador a medida que se inicia la ejecución y luego registrando el contador cuando finaliza la ejecución. Reste el inicio desde el final para obtener el cambio del contador, luego divida por la frecuencia para obtener el tiempo en segundos.

LARGE_INTEGER start, finish, freq; 
QueryPerformanceFrequency(&freq); 
QueryPerformanceCounter(&start); 
// Do something 
QueryPerformanceCounter(&finish); 
std::cout << "Execution took " 
    << ((finish.QuadPart - start.QuadPart)/(double)freq.QuadPart) << std::endl; 
2

Es bastante fácil en Windows también - de hecho, es la misma función en tanto std::clock, d efined en <ctime>

1

Las funciones que debe usar dependen de la resolución del temporizador que necesite. Algunos de ellos dan resoluciones de 10 ms. Esas funciones son más fáciles de usar. Otros requieren más trabajo, pero dan una resolución mucho mayor (y pueden causar algunos dolores de cabeza en algunos entornos. Sin embargo, su máquina de desarrollo podría funcionar bien).

http://www.geisswerks.com/ryan/FAQS/timing.html

En este artículo se menciona:

  • timeGetTime
  • RDTSC (una característica del procesador y no una característica OS)
  • QueryPerformanceCounter
2

Puede utilizar la API de Windows Función GetTickCount() y compare los valores en st arte y fin La resolución está en el estadio de 16 ms. Si por algún motivo necesita más temporizaciones precisas, tendrá que consultar QueryPerformanceCounter.

0

C++ funciona en muchas plataformas. ¿Por qué no utilizar algo que también funciona en muchas plataformas, como las bibliotecas Boost?

vistazo a la documentación para el Boost Timer Library

Creo que es una biblioteca sólo de encabezado, lo que significa que es fácil de configurar y usar ...

Cuestiones relacionadas