2010-08-24 9 views
30

Quiero saber por cuánto tiempo (aproximadamente) se ejecuta algún bloque de código. Algo como esto:¿Cómo mido el tiempo en C?

startStopwatch(); 
// do some calculations 
stopStopwatch(); 
printf("%lf", timeMesuredInSeconds); 

¿Cómo?

+1

¿Cuál es su plataforma? – pmod

+0

@Pmod ¿Qué quiere decir con plataforma? Mi sistema operativo es Windows. – snakile

+1

¿Qué resolución desea lograr y cuánto sobrecarga acumulada está dispuesto a tolerar? –

Respuesta

47

Usted puede utilizar el método clock en time.h

Ejemplo:

clock_t start = clock(); 
/*Do something*/ 
clock_t end = clock(); 
float seconds = (float)(end - start)/CLOCKS_PER_SEC; 
+0

+1: Agradable y simple. Sin embargo, ¿no necesitarás convertir '(end - start)' a un punto flotante antes de la división si quieres obtener fracciones de segundo? – torak

+0

@torak Sí, creo que tienes razón, aunque no he tenido la oportunidad de probarlo. – KLee1

+0

O multiplique por 1.0 –

16

Usted puede utilizar la biblioteca time.h, específicamente los time y difftime funciones:

/* difftime example */ 
#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    time_t start,end; 
    double dif; 

    time (&start); 
    // Do some calculation. 
    time (&end); 
    dif = difftime (end,start); 
    printf ("Your calculations took %.2lf seconds to run.\n", dif); 

    return 0; 
} 

(Ejemplo adaptado de la página web difftime vinculada anteriormente.)

Tenga en cuenta que este método solo puede dar segundos de precisión: time_t registra los segundos desde el UNIX epoch (1 de enero de 1970).

+0

Esto proporciona solo segundos de precisión. Y su ejemplo en realidad no usa ''. – Dummy00001

+0

Lo sentimos, la 'c' era un error tipográfico: la biblioteca ctime se define en 'time.h'. Y sí, solo da segundos de precisión. Considerando que el cartel decía "aproximadamente", lo consideré suficiente.Editaré mi respuesta para incluir el hecho de que solo dará segundos de nivel de precisión, si lo desea. – Stephen

0

Si usted no necesita resolución fantástica, se puede usar GetTickCount(): http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx (Si se trata de algo que no sean sus propios diagnósticos simples, a continuación, tenga en cuenta que este número puede envolver alrededor, por lo que necesita para manejar eso con un poco de aritmética).

QueryPerformanceCounter es otra opción razonable. (También se describe en MSDN)

0

Usaría las funciones QueryPerformanceCounter y QueryPerformanceFrequency de la API de Windows. Llame al anterior antes y después del bloque y reste (actual − anterior) para obtener el número de "tics" entre las instancias. Divida esto por el valor obtenido por la última función para obtener la duración en segundos.

2

GetTickCount().

#include <windows.h> 
void MeasureIt() 
{ 
    DWORD dwStartTime = GetTickCount(); 
    DWORD dwElapsed; 

    DoSomethingThatYouWantToTime(); 

    dwElapsed = GetTickCount() - dwStartTime; 

    printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000); 
} 
Cuestiones relacionadas