Uhr (nach)programmieren

  • Themenstarter Themenstarter hüteüberhüte
  • Beginndatum Beginndatum
H

hüteüberhüte

Gast
Geplant ist, eine "Analog"uhr zu programmieren. Dabei habe ich allerdings zwei Fragen:

- Sollte man Thread.sleep(1000) verwenden, bevor die Uhr aktualisiert wird? Wenn nein, gibt es eine andere, nicht darauf basierende Möglichkeit?
- Wie lang sollten die Zeiger im Verhältnis zum Radius der Uhr sein (Sekunden-, Minuten- und Stundenzeiger)?

Danke schon mal 😱
 
- Sollte man Thread.sleep(1000) verwenden, bevor die Uhr aktualisiert wird? Wenn nein, gibt es eine andere, nicht darauf basierende Möglichkeit?
Java:
long start = System.currentTimeMillis();
while(start +1000 > System.currentTimeMillis());
- Wie lang sollten die Zeiger im Verhältnis zum Radius der Uhr sein (Sekunden-, Minuten- und Stundenzeiger)?
Mach sie so lang, wie du
denkst, dass es schön
aussieht.
 
Java:
long start = System.currentTimeMillis();
while(start +1000 > System.currentTimeMillis());
Also von sowas sollte man Abstand nehmen, das nennt sich busy waiting und belegt eine Sekunde lang die CPU.

- Sollte man Thread.sleep(1000) verwenden, bevor die Uhr aktualisiert wird? Wenn nein, gibt es eine andere, nicht darauf basierende Möglichkeit?
Ich würde das mit nem Timer und scheduleAtFixedRate machen.
 
ja, eine Schleife mit 100% CPU-Belastung ist schon übel,
das Rechnen aber zumindest ein guter Hinweis,
ob die Sekunde nun genau zur richtigen Zeit umschaltet oder 20ms früher/später merkt kein Mensch,
wird ja wohl nicht gleich für internationale Sportereignisse zur Zeitmessung eingesetz,

wichtig ist aber dass sich kein Fehler addiert, 1000ms warten, 5ms arbeiten, 1000ms warten, 5ms arbeiten
-> nach einem Tag 0.5% = 7 Min. Abweichung,

also lieber die Differenz zwischen aktuellen und nächsten Zeitpunkt ausrechnen und dann mal auch nur 980ms warten,
wie es gerade errechnet wird,

einen theoretischen Hänger von paar Sekunden, z.B. durch irgendein Wahnsinns-Programm nebenher (mit 100% CPU durch Dauerschleife)
könnte damit auch verkraftet werden, immer die nächsten vollen 1000ms ans Ziel,
gar nicht erst die bisherigen Durchläufe zählen, sondern die Zeit dann berechnen/ von Calendar-Klasse berechnet bekommen
 
also dieses "busy waiting" wollte ich auch nicht machen. Klar kann sleep unterschiedlich lange dauern (so dass man 'nachjustieren' muss), aber ich dachte vielleicht gäbe es eine andere Möglichkeit, die ganz davon abweicht (Timer beruht wahrscheinlich auf demselben Prinzip).

Nochmal zu den Zeigern (eher philosophisch, es gibt doch auch die besonders "schöne" Uhrzeit Zehn vor Zwei): Gibt es eine Regel, wie lang man die Zeiger machen sollte?
 
Nochmal zu den Zeigern (eher philosophisch, es gibt doch auch die besonders "schöne" Uhrzeit Zehn vor Zwei): Gibt es eine Regel, wie lang man die Zeiger machen sollte?

Naja, die Länge machst du als Design-Talent so wie es dir gefällt.
Wichtiger ist wohl, dass der kürzere, also der Stundenzeiger wenigstens partiell breiter ausgeführt wird, als der lange Minutenzeiger, damit bei Überlagerung (10 nach 2, 5 nach 1, oder sowas) die Richtung des Stundenzeigers noch erkennbar bleibt.
Schau dir einfach Analoguhren mal genauer an.
Man könnte alternativ auch, anders als bei realen Uhren, die Überlagerung auch anders deutlich machen, bei unterschiedlicher Zeigerfarbe, z.B. durch Farbmischung, oder dgl. Effekte.....
 
Zuletzt bearbeitet von einem Moderator:
Es kommt beim Timing auch irgendwie darauf an, wie sich der Sekundenzeiger bewegen soll. Die Sleep-Pausen sollten aber nicht höher als 'ne halbe Sekunde sein. Das ist mit 'ner Abtastrate vergleichbar, die maximal nur die Hälfte (besser gesagt: doppelte Frequenz, bedeutet halbe Periodendauer) der kleinsten darzustellenden Frequenz sein sollte.
Dann kann man wie SlaterB schon sagt, die Zeitdifferenzen aufaddieren und immer wenn 1000ms zusammen gekommen sind, den Zeiger bewegen. So bewegt sich der Sekundenzeiger wirklich nur sekundenweise. Man kann aber auch die Periodendauer der Abtastrate noch weiter verringern (25 FPS entsprechen 40ms), so ergibt sich eine weichere Bewegung.
 
Wichtiger ist wohl, dass der kürzere, also der Stundenzeiger wenigstens partiell breiter ausgeführt wird, als der lange Minutenzeiger, damit bei Überlagerung (10 nach 2, 5 nach 1, oder sowas) die Richtung des Stundenzeigers noch erkennbar bleibt.

Ich wollte evtl. unterschiedlich lange und starke Pfeile als Zeiger machen. Z.B. so:

Code:
---___
      ---___
      ___---
___---

(Sieht jetzt nicht soo künstlerisch aus..)
 

Neue Themen


Zurück
Oben