Schönen Tag auch.
Folgendes: Ich möchte einen Timer schreiben, der die Zeit vom Sytemstart bis zum Herunterfahren misst und in
einem Fenster mit sechs digitalen Ziffern darstellt. Dazu sollte auch die Zeitmessung sehr genau sein.
Jetzt meine Frage: Welcher der beiden von mir in Betracht gezogenen Methoden misst genauer?
Methode 1:
Ich lasse mit zu Beginn des Threads die aktuelle Systemzeit mittels System.getCurrentTimeMillis() geben
und ziehe diese dann bei jedem Hochzählen von der aktuellen Systemzeit ab. Dann habe ich die Millisekunden,
sie seit Beginn vergangen sind, rechne diese so um, dass ich sie auf sechs Digitalziffern verteilen kann und gebe
sie in einem int-Array aus:
Methode 2:
Ich definiere eine Variable int i = 0, zähle sie in einer while-Schleife immer um eins hoch und lasse den Thread mittels Thread.sleep() 1000 Millisekunden schlafen. Der Rest würde dann wie oben gehen.
Folgendes: Ich möchte einen Timer schreiben, der die Zeit vom Sytemstart bis zum Herunterfahren misst und in
einem Fenster mit sechs digitalen Ziffern darstellt. Dazu sollte auch die Zeitmessung sehr genau sein.
Jetzt meine Frage: Welcher der beiden von mir in Betracht gezogenen Methoden misst genauer?
Methode 1:
Ich lasse mit zu Beginn des Threads die aktuelle Systemzeit mittels System.getCurrentTimeMillis() geben
und ziehe diese dann bei jedem Hochzählen von der aktuellen Systemzeit ab. Dann habe ich die Millisekunden,
sie seit Beginn vergangen sind, rechne diese so um, dass ich sie auf sechs Digitalziffern verteilen kann und gebe
sie in einem int-Array aus:
Code:
public class TimeManager {
private long systemTime, currentTime;
private int hours, minutes, seconds;
public TimeManager() {
systemTime = System.currentTimeMillis();
hours = 0;
minutes = 0;
seconds = 0;
}
public void countUp() { //diese Methode wird von einem externen Thread jede Sekunde aufgerufen
currentTime = System.currentTimeMillis();
long difference = (currentTime-systemTime)/1000;
hours = (int)difference/3600;
minutes = (int)(difference%3600)/60;
seconds = (int)(difference%3600)%60;
}
public void start() {
systemTime = System.currentTimeMillis();
}
public void reset() {
hours = 0;
minutes = 0;
seconds = 0;
}
public int[] getTimeValues() {
return new int[]{ (int)Math.floor(hours/10),
(int)hours%10,
(int)Math.floor(minutes/10),
(int)minutes%10,
(int)Math.floor(seconds/10),
(int)seconds%10 };
}
}
Methode 2:
Ich definiere eine Variable int i = 0, zähle sie in einer while-Schleife immer um eins hoch und lasse den Thread mittels Thread.sleep() 1000 Millisekunden schlafen. Der Rest würde dann wie oben gehen.