Voglio presentare una semplice classe per gestire un timer.
L'idea è nata dalla necessità di misurare il tempo impiegato ad eseguire uno script...al tempo stesso volevo un codice semplice e riutilizzabile per risolvere definitivamente il problema.
L'interfacccia della classe è davvero molto semplice e ricorda quella di un cronometro:
codice:
§ Caratteristiche
Unità di misura : [ms]
Risoluzione : 1 [ms]
Tempo misurabile : ± 24 giorni (int a 32 bit)
§ Interfaccia base
::Read()
Ritorna il tempo misurato in ms (valore intero)
::Reset()
Resetta il cronometro
§ Interfaccia avanzata
::Stop()
Mette in pausa il cronometro
::Restart()
Fa ripartire il cronometro
::Reset($elapsed)
Resetta in modo che il tempo trascorso sia pari a $elapsed
$elapsed può essere negativo
NOTA: si può anche usare come parametro nel costruttore
ok...qui la classe
codice:
class Timer
{
// costruttore
function Timer($elapsed = 0)
{
$this->b_stop = false;
$this->reset($elapsed);
}
// ritorna millisecondi trascorsi
function read(){
return( $this->abstime()-$this->s_time );
}
// resetta il timer
function reset($elapsed = 0){
$this->s_time = $this->p_time = ($this->now()-$elapsed);
}
// mette in pausa (read() ritornerà sempre lo stesso valore)
function stop(){
$this->b_stop = true;
$this->p_time = $this->now();
}
// toglie pausa
function restart(){
$this->b_stop = false;
$this->s_time += ($this->now() - $this->p_time);
}
// ritorna tempo assoluto in millisecondi(tenendo conto della pausa)
function abstime(){
return($this->b_stop?$this->p_time:$this->now());
}
// ritorna tempo assoluto in ms
function now(){
list($usec, $sec) = explode(" ",microtime());
return ( (int)(1000*((float)$usec + (float)$sec)));
}
var $s_time; //tempo iniziale
var $p_time; //tempo al momento della pausa
var $b_stop; //in pausa?
}
Un esempio semplice semplice di utilizzo (suppongo la classe si trovi nel file timer.php)
codice:
<?php
require 'timer.php';
$timer = new Timer();
// ciclo per far passare qualche frazione di secondo
for($i=0; $i<2000000; $i++){
}
echo "Tempo trascorso : ".$timer->read()."[ms]
";
?>
Per i (PHP5) perfezionisti:
le tre variabili dovrebbero essere private
il metodo now() statico
il metodo abstime() privato
Per il resto che devo dire? Tutto lì...ma non dite che non vi avevo avvertito! Era solo una (micro)pillola!