All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.jpattern.shared.util.Chronometer Maven / Gradle / Ivy

The newest version!
package com.googlecode.jpattern.shared.util;



/**
 * Classe di utilita' che realizza un cronometro per misurare
 * intervalli temporali espressi in millisecondi. Basata sull'orologio
 * di sistema (vedere System.currentTimeMillis()).
 * 

* La precisione delle misure di tempo effettuate dipende dunque * dall'accuratezza con la quale e' realizzato il timer di * sistema Java: esperimenti pratici rivelano che in ambiente Windows * la sensibilita' di System.currentTimeMillis() e' di * 10 ms, mentre su stazioni SUN Sparc, ad esempio, e' di 1 ms. *

* Corretta anche in situazioni multi-threading. *

* * @author Marco Cimatti * @version 1.0 */ public class Chronometer { /** Accumulatore contenente il numero dei millisecondi trascorsi. */ private long contatore; /** Istante temporale dell'ultimo avvio del cronometro. */ private long avviato_a; /** Variabile di stato che indica se il cronometro sta avanzando oppure no. */ private boolean avanzando; /** * Costruttore: resetta il cronometro invocando il metodo d'istanza * azzera(). Non avvia il conteggio; per fare cio' usare * i metodi avanza() ed avanzaDaCapo(). * * @see #reset() * @see #start() * @see #restart() */ public Chronometer() { reset(); } /** Metodo per (fermare ed) azzerare del cronometro. */ public void reset() { synchronized (this) { contatore = 0; avanzando = false; } } /** * Metodo che fa (ri)partire il conteggio. Non azzera il * cronometro, ma fa procedere la misura del tempo partendo dal * valore immagazzinato nell'accumulatore. *

* Il cronometro puo' essere fermato mediante ferma(). * * @see #pause() */ public void start() { synchronized (this) { avviato_a = System.currentTimeMillis(); avanzando = true; } } /** * Metodo che blocca l'avanzamento del cronometro. Usare * avanza() per far ripartire il conteggio, * avanzaDaCapo() per azzerare il tutto prima di * dare inizio al conteggio. * * @see #start() * @see #restart() */ public void pause() { synchronized (this) { contatore += System.currentTimeMillis() - avviato_a; avanzando = false; } } /** Azzera il cronometro e ne fa partire il conteggio. */ public void restart() { reset(); start(); } /** * Lettura del conteggio corrente effettuato dal cronometro. * Chiamate successive a questo metodo riportano valori diversi * nel caso in cui il cronometro stia avanzando. * * @return il numero totale di millisecondi contati dall'istanza. */ public long read() { synchronized (this) { return avanzando ? contatore + System.currentTimeMillis() - avviato_a : contatore; } } /** * Conversione in stringa del conteggio corrente. La lettura del * valore viene effettuata mediante il metodo leggi(). * * @return una stringa rappresentante il numero di millisecondi * contati dall'istanza in questione. * @see #read() */ public String toString() { return "" + read(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy