PDA

View Full Version : [JAVA] Timer


topix93
16-02-2012, 18:10
Per caso qualcuno ha uno spezzone di codice che sia in grado di avviare e stoppare un timer che una precisione intorno ai millisecondi

GByTe87
16-02-2012, 20:33
Se devi solo misurare un tempo (es: misurare il tempo di esecuzione di un task) un paio di Calendar.getTimeInMillis() dovrebbero bastare.

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#getTimeInMillis%28%29

PGI-Bis
17-02-2012, 00:00
Usa System.nanoTime().

Premetto che a quest'ora non mi fiderei neanche se scrivessi il mio nickname MA

public class Crono {

private long timeline = 0;
private long then = 0;
private boolean paused;

public void start() {
if(!paused) timeline = 0;

paused = false;
then = System.nanoTime();
}

public void pause() {
updateTimeline();
paused = true;
}

public void stop() {
if(!paused) {
updateTimeline();
}
}

protected void updateTimeline() {
long now = System.nanoTime();
long dtime = now - then;
timeline += dtime;
}

public long getTimeNs() {
return timeline;
}

public String toString() {
long ms = 1000000;
long s = ms * 1000;
long m = s * 60;
long h = m * 60;
long hh = timeline / h;
long mm = (timeline - hh * h) / m;
long ss = (timeline - hh * h - mm * m) / s;
long msms = (timeline - hh * h - mm * m - ss * s) / ms;
return String.format("%d:%d:%d.%d", hh, mm, ss, msms);
}

public static void main(String[] args) {
Crono c = new Crono();
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println("S to start, P to pause, X to stop, Q to quit");
while(true) switch(in.nextLine().toLowerCase()) {
case "s":
c.start();
System.out.println("Partito...");
break;
case "p":
c.pause();
System.out.println("In pausa (Parziale: " + c + ")");
break;
case "x":
c.stop();
System.out.println("Tempo trascorso in ns: " + c);
break;
case "q":
System.out.println("Uscita");
return;
}
}
}

La conversione nanosecondi-hmsms è da antologia del Lambrusco.

topix93
17-02-2012, 23:09
grazie a tutti... alla fine ho usato Calendar.getTimeInMillis()
long startTime = Calendar.getTimeInMillis();

//Mie Operazioni

long finalTime = Calendar.getTimeInMillis();

long durata = finalTime - startTime