AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Timer mit Auflösung 1ms

Offene Frage von "zarquon"
Ein Thema von zarquon · begonnen am 25. Apr 2005 · letzter Beitrag vom 26. Apr 2005
Antwort Antwort
zarquon

Registriert seit: 25. Apr 2005
2 Beiträge
 
#1

Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 19:34
Hallo,

wahrscheinlich ist die Lösung für mein Problem sehr trivial, aber ich bin bisher nicht darauf gekommen. ich habe schon in einigen anderen Sprachen programmiert, aber gerade erst mit Delphi angefangen.

ich brauche einen Timer unter Delphi 7 mit möglichst hoher zeitlicher Auflösung, optimalerweise 1ms. Meine Experimente mit dem TTimer haben gezeigt, das auch bei "Interval=1" die Auflösung bei ca. 16ms liegt.

Mit dem kommerziellen "Hi-Time" von Mabry (http://www.mabry.com/) komme ich auf ca. 4ms, das ist schonmal ein bedeutender Fortschritt. Im endeffekt würde mir das reichen, aber vielleicht gibt es ja einen freeware-komponenten, der das gleiche leistet? Ich will nämlich eigentlich nicht 70$ für eine nur teilweise zufriedenstellende lösung zahlen.

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 19:37
Hi,

der DXTimer von den DelphiX-Komponenten
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 19:37
Grund: Windows ist Multitasking, das heißt auch Andere Anwendungen bekommen Rechenzeit zugesprochen. Deshalb bekommt dein Programm bei normaler Priorität nur ca. alle 20 (16) Sekunden Rechenzeit zugeteilt. Wenn du die Priorität deines Hauptthreads erhöhst so sollte der normale Timer auch geringere Intervalle schaffen. Ähnlich/Gleich funktionieren auch die Hi-Timer, sie laufen zumeist in einem Thread mit höherer Priorität.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#4

Re: Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 20:33
Hee, ich habe doch mal gelesen, dass man den Prozessor nur maximal 18,7 mal pro sekunde nach der Zeit fragen kann...
Ist das jetzt Blödsinn, oder lässt sich das mit dem hier genannten Problem irgendwie in Verbindung bringen?
Zitat von SirThornberry:
Deshalb bekommt dein Programm bei normaler Priorität nur ca. alle 20 (16) Sekunden Rechenzeit zugeteilt.
Sry, das kommt mir komisch vor. Schließlich kann ein Prozess auch 100% Rechenleistung bekommen...
ich glaube ich verstehe dich jetzt miß, weil, so wie ich das verstehe, würde dann ja in jedem programm nur alle 20 Sekunden etwas passieren...
Erklärst du mir das?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 20:36
wenn ein Programm 100% rechleistung hat liegt das auch daran wenn andere Programme ihre Rechenzeit abgeben weil sie nix zu tun haben. Am besten du sucht bei google mal nach "zeitscheiben" und/oder "multithreading" etc. da wurde das zu 100% schon irgendwo perfekt erklärt.

[Edit]
Ahhh, jetzt versteh ichs endlich, soll natürlich Millisekunden heißen
[/Edit]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 20:36
Zitat von yankee:
Zitat von SirThornberry:
Deshalb bekommt dein Programm bei normaler Priorität nur ca. alle 20 (16) Sekunden Rechenzeit zugeteilt.
würde dann ja in jedem programm nur alle 20 Sekunden etwas passieren...
Erklärst du mir das?
Millisekunden natürlich, aber deine letzte Aussage stimmt (wenn mit Millisekunden)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Timer mit Auflösung 1ms

  Alt 25. Apr 2005, 21:40
Wozu brauchst du eine so hohe Auflösung? Eventuell findet sich ja eine bessere Lösung? Ich denke da an Threads und speziell an MSDN-Library durchsuchenCreateTimerQueueTimer.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
zarquon

Registriert seit: 25. Apr 2005
2 Beiträge
 
#8

Re: Timer mit Auflösung 1ms

  Alt 26. Apr 2005, 14:15
Danke für die zahlreichen Antworten, ich werde auf jeden Fall den erwähnten DX-Timer ausprobieren. Ich hab mir schon gedacht, das es mit der Priorität des Thread zu tun haben könnte.

Das Programm liest Werte einer Analog-Digital-Konverterkarte für ein wissenschaftliches Experiment aus, bisher ca. 60 Messwerte pro Sekunde (also alle 16ms). Das ist gerade so die untere Grenze. Schön wären 100 Werte/Sek, mehr wäre nett, muss aber auch nicht sein.
Der Hi-Timer gibt mir im optimalen Fall ca. 240 Werte/Sek, allerdings hab dann ein Problem in der Log-Datei: Dort werden die Werte über "FormatDateTime('hh:mm:ss.zzz', GetTime)" geschrieben, aber die Millisekunden stimmen nicht. Es werden immer drei oder vier Messwerte zu genau dem selben ms-Wert geschrieben.

Anscheinend läuft die interne Uhr auch nur mit einer 16ms auflösung.
Allerdings habe ich mir dazu schon überlegt, den genauen ms-wert auch aus dem Timer zu ermitteln, entweder durch einen gut gewählten Intervall-Wert oder durch eine selbstkalibrierung (Ich warte mit der Systemuhr genau 1s und schaue, wieviele Events der Timer geliefert hat)

Klingt das irgendwie sinnvoll? Oder ist das von-hinten-durch-die-Brust-ins-Auge gedacht?
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#9

Re: Timer mit Auflösung 1ms

  Alt 26. Apr 2005, 14:33
Zitat von zarquon:
Allerdings habe ich mir dazu schon überlegt, den genauen ms-wert auch aus dem Timer zu ermitteln, entweder durch einen gut gewählten Intervall-Wert oder durch eine selbstkalibrierung (Ich warte mit der Systemuhr genau 1s und schaue, wieviele Events der Timer geliefert hat)
die "genauste" Zeit, die Deine PC-Hardware liefern kann, erhältst Du per API MSDN-Library durchsuchenQueryPerformanceFrequency / MSDN-Library durchsuchenQueryPerformanceCounter.

Beispiel:
Delphi-Quellcode:
Var
  Freq,
  PerfCount : Int64;
Begin
  QueryPerformanceFrequency(Freq); // Ticks per Sekunde

  For X:=1 TO 10000 Do Begin
    QueryPerformanceCounter(PerfCount);

    WriteLn(FormatFloat('0.0',PerfCount / Freq * 1000)); // * 1000 => Millisekunden
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:17 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