Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exakte Zeitmessung (https://www.delphipraxis.net/91030-exakte-zeitmessung.html)

valjah 27. Apr 2007 18:53


Exakte Zeitmessung
 
Ich weiß, dieses Thema ist schon oft hier und woanders abgehandelt worden, aber so richtig schlau bin ich auch nach stundenlangem googlen immer noch nicht.

Mein Problem: ich benötige eine exakte Zeitmessung für den Abstand zwischen zwei Ereignissen, z.B. zwei Tastendrücken. Im Prinzip wie eine Stoppuhr. Es geht nicht um ein Spiel und Grafik spielt dabei auch keine Rolle.

Anforderungen:
- Auflösung 1 ms
- 100% Zuverlässigkeit
- unabhängig von Störeinflüssen (andere Windows-Prozesse, Messages, Threads, etc.)
- unabhängig von der Prozessorgeschwindigkeit
- unabhängig von der Framerate

Eigentlich sollte man dazu wohl eine spezielle Hardware einsetzen, oder eben unter DOS (Pascal) arbeiten, aber vielleicht gibt es ja doch eine Lösung für Windows/Delphi.

Folgende Möglichkeiten habe ich bis jetzt gefunden:
1) TimeGetTime (offensichtlich nicht ausreichend genau)
2) QueryPerformanceCounter (möglicherweise von anderen Systemkomponenten abhängig)
3) DXTimer aus DelphiX (setzt offensichtlich selbst die TimeGetTime-Komponente ein)
4) HPTimer (dazu habe ich keine weiteren Informationen gefunden)
5) MTimer (auch dazu keine Infos, weitere Timer unter http://homepages.borland.com/torry/timers.htm)
6) ExacTicks (kommerzielle Alternative, kommt eigentlich nicht in Frage)

Ich bin mir nicht sicher, ob eine dieser Optionen meine Anforderungen erfüllt. Vielleicht hat ja hier im Forum schon jemand Erfahrung mit einer dieser oder anderen Lösungen gesammelt oder kann mir sonst irgendwie helfen.

Vielen Dank!

Hawkeye219 27. Apr 2007 19:24

Re: Exakte Zeitmessung
 
Willkommen in der Delphi-PRAXiS, valjah!

Eine Lösung kann ich dir leider nicht anbieten, aber vielleicht helfen dir die beiden folgenden Links:

Timer Tutorial von Henning Brackmann
Exakte Zeitmessungen auf Multiprozessoren

Der verlinkte Delphi-PRAXiS-Thread enthält weitere Links (unter anderem in das MSDN).

Gruß Hawkeye

omata 27. Apr 2007 19:50

Re: Exakte Zeitmessung
 
Hallo,

Zitat:

Zitat von valjah
Anforderungen:
- Auflösung 1 ms
- 100% Zuverlässigkeit
- unabhängig von Störeinflüssen (andere Windows-Prozesse, Messages, Threads, etc.)
- unabhängig von der Prozessorgeschwindigkeit
- unabhängig von der Framerate

bei diesen Anforderungen kannst du Windows bzw. ein normales Betriebssystem gleich vergessen. Die Echtzeit-Fähigkeit ist nicht gegeben, mehr ist dazu nicht zusagen.

100% Zuverlässigkeit ist nicht möglich (mit einen normalen Betriebssystem).

Gruss
Thorsten

himitsu 27. Apr 2007 20:17

Re: Exakte Zeitmessung
 
Zitat:

möglicherweise von anderen Systemkomponenten abhängig
das mag zwar stimmen, aber da eigentlich die Auflösung weißt unter deiner gewünschten 1 ms liegt, wäre es also vollkommen ausreichend (du brauchst dann ja nur auf ms runden).

und dann bleibt dir nur noch die Möglichkeit die Thread/Prozess-Priorität hochzusetzen, so daß andere Prozesse nicht mehr soviel Einfluß haben.

TimeCritical, wäre dabei die draßtischte Maßnahme, nur reagiert dann wärend dein Prozeß läuft nichts Anderes mehr.

valjah 28. Apr 2007 14:46

Re: Exakte Zeitmessung
 
Vielen Dank für die hilfreichen Antworten!

Zusammenfassend bin ich nun zu folgenden Schlüssen gelangt:
1) Am besten wäre eine externe Hardwarelösung.
2) Die zweitbeste Lösung wäre ein anderes Betriebssystem (DOS, UNIX).
3) Die drittbeste Möglichkeit wäre, den Prozess auf TimeCritical laufen zu lassen.
Alle obengenannten scheiden aus unterschiedlichen Gründen aus. D.h. ich bin auf der Suche nach
4) der viertbesten Möglichkeit, die selbstverständlich keine Ideallösung sein kann:
- entweder ein Threaded Timer, wie in dem Tutorial von Henning Brackmann
- oder eine Lösung mit DirectX/DXTimer
Habt Ihr Erfahrungen mit diesen Möglichkeiten gesammelt und was würdet Ihr empfehlen?

Gruß,
valjah

Reinhard Kern 28. Apr 2007 15:56

Re: Exakte Zeitmessung
 
Zitat:

Zitat von valjah
Vielen Dank für die hilfreichen Antworten!

Zusammenfassend bin ich nun zu folgenden Schlüssen gelangt:
1) Am besten wäre eine externe Hardwarelösung.
2) Die zweitbeste Lösung wäre ein anderes Betriebssystem (DOS, UNIX).
3) Die drittbeste Möglichkeit wäre, den Prozess auf TimeCritical laufen zu lassen.
Alle obengenannten scheiden aus unterschiedlichen Gründen aus. D.h. ich bin auf der Suche nach
4) der viertbesten Möglichkeit, die selbstverständlich keine Ideallösung sein kann:
- entweder ein Threaded Timer, wie in dem Tutorial von Henning Brackmann
- oder eine Lösung mit DirectX/DXTimer
Habt Ihr Erfahrungen mit diesen Möglichkeiten gesammelt und was würdet Ihr empfehlen?

Gruß,
valjah

Hallo,

andere Betriebssysteme, die du in Erwägung ziehst, sind kein bisschen besser, offensichtlich kennst du keine Real-Time-Systeme. Solange du kein echtes RealTimeSystem einsetzt, sind alle deine Bemühungen zum Scheitern verurteilt (ausser externer Hardware natürlich). Unter den normalen Betriebssystemen ist die Wahrscheinlichkeit eines Fehlers zwar schon unterschiedlich gross z.B. je nach Prozesspriorität, aber sie wird niemals 0, weil es eben keine garantierte Reaktionszeit gibt. D.h. deine Zeitmessung stimmst meistens, vielleicht stimmt sie auch in 9999 von 10000 Fällen, aber unter DOS, Windows oder Unix wird sie eben nicht IMMER stimmen. Ohne Einsatz eines RTOS musst du damit einfach leben.

Gruss Reinhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz