Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi GetTickCount genauer als GetLocalTime? (https://www.delphipraxis.net/124512-gettickcount-genauer-als-getlocaltime.html)

Viktorii 20. Nov 2008 10:26


GetTickCount genauer als GetLocalTime?
 
Hallo.

Ich möchte die Zeitdifferenz möglichst genau zwischen zwei Ereignissen ermitteln. Da ich auch die Uhrzeit der Ereignisse brauche, speichere ich mir diese mit GetLocalTime weg. Nun kann ich natürlich durch Subtraktion die Zeitdifferenz zwischen zwei Ereignissen ermitteln.
Würde ich genauere Ergebnisse erhalten wenn ich mit GetTickCount gespeicherte Werte subtrahiere? Wo habe ich eine besser Zeitauflösung?
Habe leider nichts dazu gefunden.
Vielen Dank.

jfheins 20. Nov 2008 13:54

Re: GetTickCount genauer als GetLocalTime?
 
Google sagt mir, beide sind auf Millisekunden genau.

Wobei das natürlich eine Genauigkeit suggeriert, die nicht gegeben ist. Auf normalen Windowssystemen kommt dein Prozess vll. alle 40ms mal kurz an die CPU, du kannst also auch nur so genau messen ;)

himitsu 20. Nov 2008 14:03

Re: GetTickCount genauer als GetLocalTime?
 
MSDN-Library durchsuchenGetTickCount hat in aktuellen Windowsversionen (glaub ich) eine 16ms-Intervall.

Die Auflösung der Typen ist zwar 1ms, aber der Windows-Timer wird nur alle 16ms aktualisiert.

und laut MSDN scheint GetLocalTime auch über diesen Timer zu laufen, also haben Beide wohl die selbe Aktualisierungsrate.

Noedel 20. Nov 2008 14:45

Re: GetTickCount genauer als GetLocalTime?
 
ich habe mal gehört, dass die letzte stelle von gettickcount ungenau ist, d.h.
bei zb. 1234 ms kannst du von eine abweichung von 10ms haben o.O

das problem kann mit
getperformancefrequency (was auf 1/1.000.000 sekunde genau arbeitet)
behoben werden :)

Flips 20. Nov 2008 15:08

Re: GetTickCount genauer als GetLocalTime?
 
Zitat:

Zitat von Noedel
das problem kann mit
getperformancefrequency (was auf 1/1.000.000 sekunde genau arbeitet)
behoben werden :)

Wobei das doch auch nur theoretische Idealwerte sind oder?

Noedel 20. Nov 2008 15:11

Re: GetTickCount genauer als GetLocalTime?
 
das mag wohl sein :)
wenn man jetzt nen prozessor mit ner taktung von unter 1 MHz hat, dann geht das schon nicht mehr auf :D :D

nein ich weiß was du meinst

himitsu 21. Nov 2008 10:02

Re: GetTickCount genauer als GetLocalTime?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Im Angang ein Programm, womit man mal testen kann, wie genau der Timer läuft.

PS: Sleep ist ebenfalls ungenau, da es intern wiederrum GetTickCount verwendet.

Bei mir ist das rausgekommen:
Code:
no Sleep   [5s]
638835954x 0ms
120x 15ms
200x 16ms
= 638836274x ~0.0000078267ms

Sleep(0)   [5s]
12381852x 0ms
120x 15ms
200x 16ms
= 12382172x ~0.0004038064ms

Sleep(50)   [10s]
19x 46ms
129x 47ms
24x 62ms
25x 63ms
= 197x ~50.7614213198ms

Sleep(995)   [60s]
12x 984ms
7x 985ms
42x 1000ms
= 61x ~995.1311475410ms

Sleep(1000)   [60s]
60x 1000ms
= 60x ~1000.0000000000ms

Beenden mit [Enter]...
Also im Pinzip ... je größer das Messintervall (hier Dauer von Sleep), desto genauer der Wert.

Bei meinen ~16ms hat man also bei einer Messdauer von 160s (16*10) eine Ungenauigkeit von ~10%
und bei 1000ms (~ 16*63) nur noch ~1,6%.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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