Salve.. avevo bisogno di un timer che mi misuri le prestazioni di una parte del programma. Non è obbligatorio che mi restituisca per forza il tempo in ms.. basta che mi dia un valore misura del tempo di esecuzione.
Il sistema operativo è ubuntu e il pc dove lo uso è un core 2 duo T5250 a 1.5 GHz.
Avevo provato questo:
/*
* A timer in C
* author: Danny Battison
* contact: gabehabe@hotmail.com
*/
#include <time.h>
#include <stdio.h>
clock_t BeginTimer()
{
//timer declaration
clock_t Begin; //initialize Begin
Begin = clock() * CLOCKS_PER_SEC/1000; //start the timer
return Begin;
}
clock_t EndTimer(clock_t begin)
{
clock_t End;
End = clock() * CLOCKS_PER_SEC/1000; //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;
}
Ma (mentre ad altri funzionava.. ad esempio con osx, ma anche ad altri con ubuntu), a me da sempre come risultato 0. E' facile vedere dal codice che clock() mi torna sempre 0.
Dopo ore e ore di ricerva, sono arrivato che l'unica causa (non essendoci problemi di compilatori/librerie ecc..) è che l'esecuzione è troppo veloce.. e dunque il tempo risulta 0.
Difatti provando ad inserire, tra il begin e l'end, un semplice:
for(int i=0;i<200000000;i++);
viene fuori il risultato corretto del tempo di esecuzione di solito 6 decimi circa.
Il problema è che nel programma dove dovrei usare ciò, devo misurare un tempo di esecuzione minore di quel tempo! E questa time non va...