Ciao a tutti,
devo lavorare ad una serie di funzioni che "cronometrino" il tempo
di calcolo di un grosso programma. Siccome da poco ho ripreso il C, volevo sapere se questa impostazione poteva funzionare:
codice:
/***************************** INCLUDE *****************************/
#include <stdio.h>
#include <time.h>
/***************************** STRUTTURE *****************************/
struct cronometro{
// time_t === long (misura di tempo, definita in time.h)
time_t ti; //istante iniziale dell'elaborazione (effettiva) [ti === tempo iniziale]
time_t tf; //istante finale e d'appoggio per i vari calcoli [tf === tempo finale]
time_t t_iter; //tempo impiegato da un'iterazione
};
struct cronometro timer = {0,0,0};
/***************************** PROTOTIPI *****************************/
time_t inizializzaT();
time_t diffT();
time_t diffTStampa();
//time_t stimaT();
time_t niente();
time_t crono();
/***************************** FUNZIONI *****************************/
time_t inizializzaT(){return time(&timer.ti);}
time_t diffT(){return timer.ti?(time_t)difftime(time(&timer.tf),timer.ti):0;}
time_t diffTStampa(){
time_t d = diffT();
time_t o[3] ={d?d/3600:0,d?d/60:0,d?d%60:0};
return d?(printf("\n[%2d:%2d:%2d] (ore:min:sec)\n",o[0],o[1],o[2]),1):0;
}
//time_t stimaT(){}
time_t niente(){return 0;}
time_t crono(int opzione){
// "motore" per tutte le operazioni legate al calcolo del tempo
// di elaborazione.
// Funziona distribuendo il controllo alle varie funzioni a seconda
// del parametro opzione.
// Nel dettaglio, delega il puntatore a funzione fpt ad assumere il
// ruolo giusto in funzione del parametro.
time_t (*fpt)();
timer.tf = time((!timer.ti?&timer.ti:NULL));
fpt = opzione==0?inizializzaT:
opzione==1?diffT:
opzione==2?diffTStampa:
niente;
return fpt();
}
/***************************** MAIN ********************************/
int main(){
char c;
crono(0);
printf("attendi qualche secondo prima di premere <INVIO>\n");
c = getchar();
printf("\n%d\n",crono(1));
crono(2);
}
che ne pensate?
ovviamente dove c'è il getchar ci sarà il programma vero e proprio, ma è per capirci.
Ho pensato che così facendo potevo espandere le funzionalità di questo cronometro aggiungendo nuove funzioni e aggiornando il puntatore fpt.
Sto andando bene?