|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2003
Messaggi: 22
|
[c]semplice timer - clock() ritorna sempre 0
Ciao a tutti
Avevo bisogno per un programmino di fare un semplice bechmark che si basa sul tempo di esecuzione di un pezzo di codice.. il più semplice possibile. In rete ho trovato questo codice: Codice:
/* * A timer in C * author: Danny Battison * contact: [email protected] */ #include <time.h> #include <stdio.h> clock_t BeginTimer() { //timer declaration clock_t Begin; //initialize Begin Begin = clock() * CLK_TCK; //start the timer return Begin; } clock_t EndTimer(clock_t begin) { clock_t End; End = clock() * CLK_TCK; //stop the timer return End; } int main () { double begin = BeginTimer(); printf ("Timer set to: %.2f\n", begin); // print the initialised timer (0) // process to be timed goes here printf ("Enter something to stop the timer: "); char input; scanf ("%c", &input); // variable declarations used for time calculation float elapTicks; float elapMilli, elapSeconds, elapMinutes; // variable definitions on to calculate time taken elapTicks = EndTimer(begin); // stop the timer, and calculete the time taken elapMilli = elapTicks/1000; // milliseconds from Begin to End elapSeconds = elapMilli/1000; // seconds from Begin to End elapMinutes = elapSeconds/60; // minutes from Begin to End printf ("Milliseconds passed: %.2f\n", elapMilli); printf ("Seconds passed: %.2f\n", elapSeconds); printf ("Minutes passed: %.2f", elapMinutes); // hold the window open char dummy; scanf ("%c", &dummy); return 0; } Lancio il programma (sempre da riga di comando) ed il risultato è: Codice:
Enter something to stop the timer: Milliseconds passed: 0.00 Seconds passed: 0.00 Minutes passed: 0.00 Guardando il codice è facile capire che la funzione "clock()" mi ritorna sempre 0 (in quanto anche con un define della costante "moltiplicatore" il risultato è sempre il medesimo :| Perchè solo a me questo programmino non va? Ps. il programma è eseguito su un portatile ASUS F3S che ha un multicore intel. Però non penso sia dovuto al processore il problema in quanto anche gli altri miei amici (che hanno testato il programma con successo) hanno pure loro il core 2 duo della intel
|
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Apr 2003
Messaggi: 22
|
up..
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2010
Messaggi: 6
|
quanto codice per niente...se vuoi sapere quanto ci mette ad eseguire del codice basta che fai cosi:
int inizio=clock(); //codice da eseguire int fine=clock(); int tempo_trascorso=fine-inizio; //tempo in millisecondi |
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Quote:
Non c'è assolutamente una convenzione, la convenzione c'è solo nei sistemi POSIX compliant in cui clock() ritorna milionesimi di secondo. Tra l'altro è anche sbagliato il tipo di dati utilizzato nel codice che ho quotato. Il modo corretto per usare clock è il seguente (è standard C99 e C89): clock_t begin, end. double elapsed_seconds; begin = clock(); //codice da eseguire end = clock(); elapsed_seconds = (double)(end - begin) / CLOCKS_PER_SEC; //tempo in secondi |
||
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Ah, quindi nel caso clock torni il tempo in milionesimi di secondo CLOCKS_PER_SEC sarà un milione. Grazie per le delucidazioni
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:44.



















