AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Exakte Zeitmessung

Ein Thema von valjah · begonnen am 27. Apr 2007 · letzter Beitrag vom 28. Apr 2007
Antwort Antwort
valjah

Registriert seit: 13. Nov 2006
19 Beiträge
 
Delphi 7 Personal
 
#1

Exakte Zeitmessung

  Alt 27. Apr 2007, 18:53
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!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Exakte Zeitmessung

  Alt 27. Apr 2007, 19:24
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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Exakte Zeitmessung

  Alt 27. Apr 2007, 19:50
Hallo,

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.111 Beiträge
 
Delphi 12 Athens
 
#4

Re: Exakte Zeitmessung

  Alt 27. Apr 2007, 20:17
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
valjah

Registriert seit: 13. Nov 2006
19 Beiträge
 
Delphi 7 Personal
 
#5

Re: Exakte Zeitmessung

  Alt 28. Apr 2007, 14:46
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
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: Exakte Zeitmessung

  Alt 28. Apr 2007, 15:56
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 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