Newsgroup: it.comp.lang.c++
Titolo: Misurare il tempo trascorso

Salve a tutti di nuovo,
    vorrei msurare il tempo di escuzione di una routine che ho scritto.
Vorrei leggere l'orario corrente, fare eseguire la routine, rileggere
l'orario e calcolarne la differenza. Qual'è il modo migliore per face ciò?
Esiste una classe, un metodo  che restituisce l'orario corrente precisa al
millesimo di secondo?
Grazie.
P.S. Dovrei fare la stessa cosa anche in Java... mi sa che posterò anche su
it.comp.lang.java questa mail, ma se qualcuno può già aiutarmi... doppie
grazie
:-)

 l'orario e calcolarne la differenza. Qual'č il modo migliore per face ciň?
il modo standard č:
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
using std::clock_t;
using std::clock;
clock_t start,end;
void foo()
{
    start=clock();
    // ... fai quello che devo fare
    end=clock()
    cout<<"Tempo impiegato= "<<double(end-start)<< " millisecondi"  << endl;
}
il metodo migliore (piů preciso) č probabilmente fare riferimento
a ciň che mette a disposizione il tuo sistema operativo
--
Gerolamo
Using: Win2000 Pro, Borland C++ Compiler 5.5.1

 ha scritto nel messaggio
news:CenS7.301896$sq5.14...@news.infostrada.it...


 a ciò che mette a disposizione il tuo sistema operativo
Occhio che non è affatto detto che il valore sia in millisecondi. In
realtà per sapere la scala dinamica del valore devi usare
CLOCKS_PER_SEC.
Inoltre non è neppure sicuro che la risoluzione del contatore sia
effettivamente CLOCKS_PER_SEC. Per esempio CLOCKS_PER_SEC potrebbe
essere 1000 a indicare un valore espresso in millisecondi che però
potrebbe avere una risoluzione effettiva molto minore (per esempio il
classico 55 millisecondi dei PC).
Il seguente programmino potrebbe aiutarti a scoprire come si comporta il
tuo sistema:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
 clock_t t[11]={0};
 unsigned r=0;
 for (int i=1; i<=10; ++i)
  while ( t[i-1] >= (t[i]=clock()) )
   ++r;
 for (int i=1; i<=10; ++i)
  cout << t[i] << " ";
 cout << ": " << r << endl;
}
sul mio sistema l'unità è effettivamente il millisecondo ma la
risoluzione è di un solo centisecondo (un centesimo di secondo).
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 risoluzione è di un solo centisecondo (un centesimo di secondo).
sul mio da:
10 20 30 40 50 60 70 80 90 100 : 3554774
Tempo impiegato= 100 1000-esimi di secondo
--
Gerolamo

 Tempo impiegato= 100 1000-esimi di secondo
Appunto. Quindi misura il tempo in 1000 di secondo ma ... ti da sempre
valori multipli di 10 (il 3554774 ti dimostra che hai chiamato la
funzione molto più di 10 volte).


classico 55 millisecondi dei PC).
Sei sicuro di quanto dici? Per quello che so io il valore di
CLOCKS_PER_SEC varia da implementazione ad implementazione( ergo, non
é sempre mille) ma il suo valore dovrebbe comunque indicare la
risoluzione precisa.
Il Ghenio
---------
These are my parting words to you:
those who give up are doomed!

 risoluzione precisa.
Bisognerebbe vedere lo standard C che non ho. Ma dubito che sia così
perchè implicherebbe una risoluzione che è un sottomultiplo intero del
secondo. Cosa non sempre vera. Sui vecchi PC DOS per esempio si
ragionava a millesimi con risoluzione 55ms. Sotto NT si ragione in
millesimi ma con risoluzione 10ms.
