![]() |
Uhrzeit auf die Millisekunde
Mh
hab mal wieder ne kleine Frage wollt wissen wie es möglich ist die Uhrzeit auf die Millisekunde genau auszulesen. Also die normale mit Stunde minute Sekunde krieg ich hin aber ich hätte gerne zusaätzlich die Millisekunden. Wäre über eure Hilfe sehr Dankebar. mfg. Crazymodder |
Re: Uhrzeit auf die Millisekunde
Wozu so genau?
Du kannst doch zu anang jeder sec einen zähler laufen lassen. |
Re: Uhrzeit auf die Millisekunde
|
Re: Uhrzeit auf die Millisekunde
Thx für die super schnellen Antworten werde mal gleich die Hilfe durchstöbern thx
|
Re: Uhrzeit auf die Millisekunde
Nur für den Fall, dass du etwas messen willst, solltest du dir einmal den QueryPerformanceCounter anschauen.
|
Re: Uhrzeit auf die Millisekunde
DAS GEHT NICHT
Soweit ich weiß arbeitet die Interne UHR nur mit 18,2 impulsen pro sekunde (18,2 Herz) für Millisekunden bräuchte man 1000 Herz. Die Millisekunden werden offensichtlich nur mitgeführt um die Rundungsfehler zu minimieren. |
Re: Uhrzeit auf die Millisekunde
Trotzdem nimmt man zum Messen
![]() ![]() |
Re: Uhrzeit auf die Millisekunde
Sicher, nur kann man so nicht Millisekunden genau messen.
Damit sich das irgendwie ausgleicht, müste man einen wiederholbaren Vorgang mehrmals messen und ein Statistischesmittel errechnen. Oder Du verwendest professionelles Equipment. |
Re: Uhrzeit auf die Millisekunde
@Crazymodder, die Uhrzeit? In "NOW" sind doch die Millisekunden immer auch schon mit dabei!
Delphi-Quellcode:
label1.Caption := FormatDateTime('hh:nn:ss:zzz', NOW);
|
Re: Uhrzeit auf die Millisekunde
Zitat:
Probierts aus:
Delphi-Quellcode:
GetTickCount hingegen ist auf die msec genau.
procedure TForm27.Button1Click(Sender: TObject);
var t, t1: TDateTime; t0: TDateTime; begin t := now ; t0 := t ; listbox1.Items.BeginUpdate; while now - t0 < EncodeTime (0,0,3,0) do begin t1 := now ; if t <> t1 then begin listbox1.items.add (formatDateTime ('s, zzz',t1-t)) ; t := now ; end; end ; listbox1.Items.EndUpdate; end; |
Re: Uhrzeit auf die Millisekunde
Perfekt so reichts mir Danke :-D :-D
Ihr seit echt geil |
Re: Uhrzeit auf die Millisekunde
In der SDK hab ich folgende nützliche Funktion gefunden:
Zitat:
Mit QueryPerformanceCounter liest du den aktuellen Wert aus. Die Differenz von 2 Aufrufen gibt dir die Anzahl der Ticks an. Diesen Werte geteilt durch die Frequenz gibt dir die Differenz in Sekunden aus. |
Re: Uhrzeit auf die Millisekunde
Guter Beitrag Jelly.
Das habe ich bis jetzt noch nicht gewust. Dieser Counter wird nicht von irgendwelchen Stromspar modi beeinflusst? |
Re: Uhrzeit auf die Millisekunde
Zitat:
|
Re: Uhrzeit auf die Millisekunde
Die Funktion NOW ist auf die Millisekunde genau (da sie intern (BS) auch mit GetTickcount usw hantiert), manche Werte lassen sich aber nicht darstellen.
Zur Erklärung: TDateTime ist im Prinzip ein einfacher Double-Wert, in dessen Ganzzahlteil die Tage seit Wasweisichwann dargestellt werden, im Nachkommateil die Millisekunden seit 0 Uhr. Eine ms ist sozusagen ein 86400000stel eines Tages, also 1,157407407...*10^-8. Da eine ms schon einen periodischen Dezimalbruch darstellt, ist die Warscheinlchkeit sehr hoch, dass auch ein vielfaches davon periodisch (auf Basis 10). Dieser Wert muss zudem binär dargestellt werden (Basis 2), was die Stelligkeit stark erhöht. Da nun bestimmte Millisekunden den Darstellungsbereich(Genauigkeit) eines Doubles sprengen muss gegebenenfalls gerundet (Basis 2) werden. Diesen gerundeten Wert kann man dann aber halt nur mit einem Fehler zurückwandeln. Es ist also nicht die Funktion ungenau, sondern das Ergebnis, was aber im Prinzip auf das Gleiche rauskommt. |
Re: Uhrzeit auf die Millisekunde
Hallo,
Zitat:
![]() Gruß Hawkeye |
Re: Uhrzeit auf die Millisekunde
Ja. Deshalb hab ich anschliessend nochmal GetPerformanceFrequency und GetPerformanceCounter aufgeführt.
|
Re: Uhrzeit auf die Millisekunde
das Basisdatum in delphi ist der 30.12.1899 00:00
Vor dem Komma sind ganze tage nach dem Komme sind Stunden,Minuten, Sekunden udn angebliche "Millisekunden" um Rundungsfehler zu minimieren. Da Fließkomma zahlen mit zunehmendem Betrag ungenauer (schlechter aufgelöste nachkommastellen )werden kann das wirklich auch die Darstellung ein probelem sein. |
Re: Uhrzeit auf die Millisekunde
Hallo Siderion,
ich muss dir leider widersprechen und zwar heftig. Now und alle damit zusammenhängenden Datum-Uhrzeitquellen hängen am Timertick Interrupt. Dieser wird alle ca 55ms ausgelöst. Dmentsprechend wird der Wert von now erhöht. Die Genauigkeit der Zeitmessung hat also überhaupt nichts mit der mathematischen Auflösung und deren Problematik zu tun, sonder hängt einfach damit zusammen, dass nur ca alle 55msec gezählt wird. Die Auflösung ist damit beschränkt. Etwas anders stellt sich die Sache mit QueryPerformanceFrequency dar. Da diese Funktion jedoch nicht auf jedem System zur Verfügung steht kann man sie getrost vergessen. Grüsse |
Re: Uhrzeit auf die Millisekunde
Hm, der Umfragesteller sprach ja auch nur vom Auslesen einer Uhrzeit, nicht aber von irgendwelchen Stoppzeiten o. Zeitdifferenzen. Das wäre natürlich schon etwas anderes gewesen ...und das dann vieldiskutierte NOW wäre in der Truhe geblieben :mrgreen:
Und von daher: Wenn es dem Threadmaker aber tatsächlich nur um eine solche normale Uhrzeit ging (was ja vllt. nicht unbedingt so sein muss), dann wäre natürlich auch die Nutzung von "QueryPerformanceCounter" nur relativ. Denn dann bliebe ihm immer noch das Problem, wo er eine exakte Anfangszeit herbekommt, welche dann nämlich ebenfalls auf die Millisekunde genau zu sein hätte. Selbst wenn er die Atomzeit aus dem Internet abfragen würde, könnte er wohl nicht sicher sein, dass da nicht auch noch einige Millisekunden Übermittlungsverzögerung mit drin sind. @WS1976 55ms, vielleicht früher mal? Heute scheinen es jedenfalls eher Perioden a 16ms zu sein. @Jelly: "GetTickCount hingegen ist auf die msec genau.“ Das Result von GetTickCount ändert sich übrigens auch nur alle 16 Millisekunden! |
Re: Uhrzeit auf die Millisekunde
Zitat:
|
Re: Uhrzeit auf die Millisekunde
Wir können also zusammenfassen: DAS GEHT NICHT. Wer millisekunden genau messen will soll sich profesionelles Equipment kaufen
oder den Wert statistisch ermitteln. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz