Newsgroup: it.comp.lang.c
Titolo: time

Ciao!
Ho bisogno di cronometrare l'esecuzione di una sequenza di istruzioni....il
modo + banale è quello di sottrarre l'ora prima dell'esecuazione a quella a
fine esecuzione. Poichè le istruzioni sono molto veloci, avrei bisogno di
una funzione tipo time che mi ritorni anche i centesimi di secondo, ne
conoscete una?
Grazie
Fabrizio

"fabrizio" wrote..:

Ci ho giocato proprio l'altro giorno :)
devi usare le funzioni time() e difftime().
Cerca su qualche reference come si usano :)
Deep

> devi usare le funzioni time() e difftime().
Ma così ottengo solamente i secondi di differenza e non i
decimi,centesimi..ecc......o sbaglio?

 decimi,centesimi..ecc......o sbaglio?
Già. Dai un occhio a clock() allora.
Qui è spiegata abbastanza bene
http://support.sas.com/documentation/onlinedoc/sasc/doc/lr1/clock.htm
Deep

 decimi,centesimi..ecc......o sbaglio?
Gia'! Infatti non credo ti abbiano dato un ottimo consiglio....
La cosa migliore e' quella di usare sistemi *non* del C, ma del OS su cui ti
trovi.... ad esempio su windows potresti guardare GetTickCount() o ancora
meglio QueryPerformanceCounter() etc.....
Se proprio non vuoi usare chiamate al tuo OS e vuoi stare sul C standard
allora prova a vedere clock() e CLOCKS_PER_SEC.
Tommy

 Tommy
Consiera inoltre che se l'istruzione e' molto veloce potrebbe essere inutile
misurarla....
Si fa fatica a trovare un timer tanto accurato da darti una la velocita'
*"vera"*, specialmente su sistemi operativi multitasking!
Ammesso di avere un ottimo timer, una volta potresti ottenere 0.00001
secondi e la volta dopo 0.0001 sec (10 volte piu' lento) ma quella dopo
ancora 0.000005..... Dipende da vari fattori.... su tempi di esecuzione
cosi' brevi dubito avrai risultati uniformi.
Se ad esempio tali istruzioni vengono richiamate in un ciclo allora forse e'
meglio guardare quanto tempo ci mette il ciclo....  Facendo cosi' avrai dati
piu' regolari ed uniformi. Vedrai che probabilmente non saranno identici, ma
varieranno di molto meno.
Per finire, non so cosa tu voglia fare... ma potrebbe esserti utile un
profiler.
Tommy

 misurarla....
Parlavo di istruzioni per rendere + generale la cosa, in realtà ho vari
processi generati casualmente che devono svolgere alcuni compiti di
sincronizzazione e devo vedere qual è la durata media di tali processi.
Poichè ci sono delle sleep i tempi sono + umani di quelli del processore.
Non mi interessa una precisione al nanosecondo...decimi e centesimi mi vanno
+ che bene.
Grazie a tutti!
Fabrizio

 + che bene.
Umh, non capisco bene quale sia il tuo problema.... ad ogni modo se hai
trovato la soluzione al tuo problema sono piu' che contento ;-)
Tommy

decimi,centesimi..ecc......o sbaglio?
Puoi usare la clock() come ha suggerito Tommy, ad es:
...
long count = 100000000L;
clock_t start;
double elapsed;   /* nota il double */
start = clock();  /* inizia la misurazione */
/* codice da cronometrare */
while (--count)
  ;
/* fine del codice da cronometrare */
elapsed = (double)(clock() - start) / CLOCKS_PER_SEC;
printf( "Tempo trascorso: %.4f secondi\n", elapsed);
...
Solitamente la risoluzione della clock() e' di un millisecondo e il
tipo clock_t equivale ad un long.
---
acc(at)
libero.it

guarda fabry, se provi a far girare il tuo programma da DOS forse riuscirai
a fare delle misurazioni migliori ;)
ciaox
"fabrizio" <fabs...@liberoNOSPAM.it> ha scritto nel messaggio
news:1mBEb.2689$Jw2...@tornado.fastwebnet.it...
