2009-09-23 32 views
22

Desidero calcolare il tempo in millisecondi richiesto dall'esecuzione di parte del mio programma. Ho cercato online, ma non ci sono molte informazioni su questo argomento. Qualcuno di voi sa come farlo?Calcolo del tempo trascorso in un programma C in millisecondi

+0

rimarcato più in linea con la convenzione. – dmckee

+1

hm ... non ho risposto a questa domanda una settimana fa: http://stackoverflow.com/questions/1444428/time-stamp-in-the-c-programming-language/1445808#1445808 – Christoph

risposta

2

Le librerie C hanno una funzione che consente di ottenere l'ora del sistema. È possibile calcolare il tempo trascorso dopo aver catturato i tempi di inizio e fine.

La funzione è chiamata gettimeofday() e puoi guardare la pagina man per scoprire cosa includere e come usarlo.

0

Su Windows, si può solo fare questo:

DWORD dwTickCount = GetTickCount(); 

// Perform some things. 

printf("Code took: %dms\n", GetTickCount() - dwTickCount); 

Non è la soluzione più generale/elegante, ma bello e veloce quando ne avete bisogno.

3

La funzione gettimeofday restituisce il tempo con precisione microsecondo (se la piattaforma può supportare che, ovviamente):

Il gettimeofday() funzione è ottenere l'ora corrente, espressa come secondi e microsecondi dal l'epoca e memorizzarla nella struttura temporale puntata da tp. La risoluzione dell'orologio di sistema è non specificato.

+1

'gettimeofday' isn È ideale per misurare il tempo trascorso tra due eventi, perché l'orologio del sistema può essere modificato tra gli eventi (ad esempio mediante un aggiornamento NTP o semplicemente un'azione dell'amministratore). (A volte però * è * la cosa migliore disponibile, però). – caf

4

Un'altra opzione (almeno su alcuni UNIX) è clock_gettime e relative funzioni. Questi permettono l'accesso a vari orologi in tempo reale e puoi selezionare uno di quelli a risoluzione più alta e gettare via la risoluzione che non ti serve.

+1

In particolare, l'orologio 'CLOCK_MONOTONIC', se il sistema su cui si sta lavorando lo supporta (' sysconf (_SC_MONOTONIC_CLOCK)> 0'). – caf

34

modo migliore per rispondere è con un esempio:

#include <sys/time.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 

/* Return 1 if the difference is negative, otherwise 0. */ 
int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1) 
{ 
    long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec); 
    result->tv_sec = diff/1000000; 
    result->tv_usec = diff % 1000000; 

    return (diff<0); 
} 

void timeval_print(struct timeval *tv) 
{ 
    char buffer[30]; 
    time_t curtime; 

    printf("%ld.%06ld", tv->tv_sec, tv->tv_usec); 
    curtime = tv->tv_sec; 
    strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime)); 
    printf(" = %s.%06ld\n", buffer, tv->tv_usec); 
} 

int main() 
{ 
    struct timeval tvBegin, tvEnd, tvDiff; 

    // begin 
    gettimeofday(&tvBegin, NULL); 
    timeval_print(&tvBegin); 

    // lengthy operation 
    int i,j; 
    for(i=0;i<999999L;++i) { 
     j=sqrt(i); 
    } 

    //end 
    gettimeofday(&tvEnd, NULL); 
    timeval_print(&tvEnd); 

    // diff 
    timeval_subtract(&tvDiff, &tvEnd, &tvBegin); 
    printf("%ld.%06ld\n", tvDiff.tv_sec, tvDiff.tv_usec); 

    return 0; 
} 
Problemi correlati