Takt der Windows-Uhr ändern

Hallo Leute,
meine Uhr von Windows (ist ein mini-itx-pc mit intel atom, läuft 24/7 durch) geht ein paar Sekunden am Tag falsch. Jetzt hab ich mir überlegt, den Taktgeber für diese Uhr so einzustellen, dass der Fehler behoben wird. Der Programmiersprachen Delphi und C bin ich mächtig und kenn mich auch a weng mit der Hardware aus. Nur weiß ich eben nicht, mit welchem Mechanismus/Vorgehen bzw. an welcher Stelle ich den Taktgeber ändern kann. Wer weiß was??

btw: es gibt ein Tool namens Tardis, das macht scheinbar auch sowas ähnliches, möcht ich aber selber programmieren, weil ichs in ne eigene applikation integrieren möchte…

Gruß
Stephan

Hallo Leute,
meine Uhr von Windows (ist ein mini-itx-pc mit intel atom,
läuft 24/7 durch) geht ein paar Sekunden am Tag falsch. Jetzt
hab ich mir überlegt, den Taktgeber für diese Uhr so
einzustellen, dass der Fehler behoben wird. Der
Programmiersprachen Delphi und C bin ich mächtig und kenn mich
auch a weng mit der Hardware aus. Nur weiß ich eben nicht, mit
welchem Mechanismus/Vorgehen bzw. an welcher Stelle ich den
Taktgeber ändern kann. Wer weiß was??

Das Zauberwort heißt

SetSystemTimeAdjustment() API.

Im Prinzip gibst Du da einen Korrekturfaktor (im Nanosekundenbereich) an, der bei jedem Uhrtick auf die Uhrzeit angewendet wird. Ich habe sogar mal ein Programm geschrieben (Delphi), das den Faktor setzt, um für Softwaretests die Zeit schneller oder langsamer vergehen zu lassen.

btw: es gibt ein Tool namens Tardis, das macht scheinbar auch
sowas ähnliches, möcht ich aber selber programmieren, weil
ichs in ne eigene applikation integrieren möchte…

Wenns aber auf Dauer genau sein soll, kommst Du über eine Zeitquelle (Internet ntpd oder angeschlossenen DCF oder GPS Empfänger) nicht herum. Auch kleine Abweichungen summieren sich mit der Zeit.

Abgesehen davon überdauert der PC eine runtergefahrene Phase durch Verwendung der batteieberiebenen BIOS Uhr (die mit der Windows Uhr, die Du meinst, nicht viel zu tun hat), und diese unterstützt keine Sekundenbruchteile, sodnern gibt nur ganze Sekudnen zurück. Das bedeutet dass Du nach einem PC Boot auf jeden Fall bis zu einer Sekunde daneben liegtst.

Tardis habe ich auch im Einsatz, es hat aber mit Deinem Problem wenig zu tun. Es besorgt Dir eine genaue Uhrzeit aus dem Internet, und korrigiert die Systemuhr.

Beachte übrigens, dass Du den Windows Zeitgeber Dienst deaktivieren musst, wenn Du SetSystemTimeAdjustment probieren möchtest, der setzt Dir sonst den Korrekturfaktor sofort wieder zurück.

AL.

Das Zauberwort heißt

SetSystemTimeAdjustment() API.

perfekt, das ist genau das was ich gesucht hab! vielen dank, hab’s grad probiert, funktioniert prima.
noch was: der parameter „disabled“, dessen funktion hab ich noch nicht ganz verstanden.

Stephan

Hallo Stephan,

perfekt, das ist genau das was ich gesucht hab! vielen dank,
hab’s grad probiert, funktioniert prima.

Das Ganze hat aber noch einen kleinen Schönheitsfehler.

Der Quarz-Oszillator auf deinem Mainboard, aus welchem die Zeit abgeleitet wird, ist etwas Temperaturabhängig. Zudem unterliegt er auch noch einer Alterung.

Du kommst also nicht ganz darum herum, die Uhr von Zeit zu Zeit richten zu müssen.

Um dauerhaft garantierte maximale Zeitabweichungen zu haben, bleibt nur der Abgleich mit einer Atomuhr. Wie schon erwähnt wurde Per DCF77, GPS oder übers Internet.

Im Internet gibt es schon unzählige Programme für diese Aufgabe.

MfG Peter(TOO)

noch was: der parameter „disabled“, dessen funktion hab ich
noch nicht ganz verstanden.

Damit schaltest Du den Mechanismus als Ganzes an oder aus, bzw. kannst Du beim komplementären API GetSystemTimeAdjustment() checken, ob er gerade an oder aus ist. Er ist allerdings meiner Meinung nach verkehrt herum bezeichnet, da er eine doppelte Verneinung ausdrückt :smile:

AL

Um dauerhaft garantierte maximale Zeitabweichungen zu haben,
bleibt nur der Abgleich mit einer Atomuhr. Wie schon erwähnt
wurde Per DCF77, GPS oder übers Internet.

Hast du vollkommen recht, ich synchronisiere per SNTP (sprich über einen Zeitserver) einmal pro Stunde. Aber dazwischen solls halt auch stimmen.

@Nimral:

Damit schaltest Du den Mechanismus als Ganzes an oder aus

Hab ich vorhin probiert, einfach mal auf nen sehr viel größeren Wert gesetzt. Die Uhr läuft immer schneller, egal ob ich disabled auf true oder false setzte…

ich synchronisiere per SNTP (sprich
über einen Zeitserver) einmal pro Stunde. Aber dazwischen
solls halt auch stimmen.

Und um wieviel Nanosekunden Abweichung handelt es sich da in einer Stunde? Mal abgesehen davon, dass du per NTP die Zeit sowieso nie genau synchron bekommst, wofür brauchst du so eine genaue Uhrzeit?
Wenn du so hohe Ansprüche an die genaue Zeit stellst, kauf dir nen ordentlichen DCF Empfänger, nen Rubudium Frequenznormal (gibts momentan bei der Bucht n Chinesen, der vertickt die Dinger günstig gebraucht) und bau dir ne Atomuhr. Aber wofür?