Calcolo del tempo trascorso in un programma C in millisecondi

Voglio calcolare il tempo in millisecondi impiegato 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?

Il modo migliore per rispondere è con un esempio:

#include  #include  #include  #include  /* 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; } 

Un’altra opzione (almeno su alcuni UNIX) è clock_gettime e funzioni correlate. 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.

La funzione gettimeofday restituisce il tempo con precisione in microsecondi (se la piattaforma può supportarlo, ovviamente):

La funzione gettimeofday () deve ottenere l’ora corrente, espressa come secondi e microsecondi dall’Epoca, e memorizzarla nella struttura temporale puntata da tp. La risoluzione dell’orologio di sistema non è specificata.

Le librerie C hanno una funzione che ti consente di ottenere l’ora del sistema. È ansible 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.

Su Windows, puoi fare questo:

 DWORD dwTickCount = GetTickCount(); // Perform some things. printf("Code took: %dms\n", GetTickCount() - dwTickCount); 

Non la soluzione più generale / elegante, ma bella e veloce quando ne hai bisogno.