Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Timer 200 ns?
Ice - Di 27.05.03 19:21
Titel: Timer 200 ns?
Hallo Leute,
ich habe da ein Problem mit der timer Komponente und zwar benötige ich ein Interval von 200 ns und bei der Timer komponente ist das kleinste intervall 1 ms wenn ich mich nicht irre?
Könnt ihr mir da helfen?
Vielen dank im voraus!
mfg
Ice
Christian S. - Di 27.05.03 19:43
Hallo!
Ich kann Dir da keine Lösung angeben, jedoch würde ich davon abraten, ein so kurzes Intervall zu verwenden. Als Beispiel:
Mein Rechner arbeitet mit ca. 1,7GHz. Das entspricht einer Taktlänge von ca. 60ns. Bei einem Rechner, der etwas langsamer ist, kann es noch länger sein. Zusammen mit all den anderen Prozessen, die in der CPU abgearbeitet werden, ist es höchst zweifelhaft, ob Du ein Zeitintervall von 200ns zuverlässig verwenden kannst. Windows kann ja selbst die "normalen" Intervalle nicht garantieren!
MfG,
Peter
Anonymous - Di 27.05.03 20:27
Auf meinem Athlon XP 2000+ Schaff' ich gerade mal 10 ms...
Wenn du so wenig wie möglich willst, ´guck mal in der OnlineHilfe nach SetTimer. Da kann man dann das Intervall auf 0 setzen.
mars - Di 27.05.03 20:52
Vielleicht verratest du uns, was du genau machen willst? Möglicherweise gibts dann eine bessere Variante.
Ice - Mi 28.05.03 10:36
Ich möchte gerne die RTS leitung meines Com Ports für 200ns auf 1 setzen danach soll sie wieder auf 0 gehen, das brauche ich um ein Reset auf dem angeschlossenen Gerät auszulösen, ich bin mir nicht ganz sicher ob das auch mit 1 ms funktioniert, werde das mal ausprobieren.
Vielen dank für die schnellen Antworten.
mfg
Ice
Sven - Mi 28.05.03 11:32
Ich habe mal von einer Timer-Komponente gehört/gelesen die 1ns schaffen soll. Schau mal torry nach. Dort könntest Du fündig werden.
Sven
Delete - Mi 28.05.03 13:10
Zum ständigen Abfragen von Informationen soll man sowieso keine Timer benutzen. Threads lasten das System dabei wesentlich geringer dabei aus.
Adrian - Mi 28.05.03 18:58
Hallo,
vielleicht hilft Dir das weiter:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure Warte(us : Longint); var Aufloes, QueryStart, QueryStop : TLargeInteger; Dauer : Real; begin QueryPerformanceFrequency(Aufloes); QueryPerformanceCounter(QueryStart); repeat QueryPerformanceCounter(QueryStop); Dauer:=(QueryStop-QueryStart)/Aufloes; until Dauer>=us; end; |
Allerdings bezweifle ich, daß 200 ns erreichbar sind.
Gruß,
Adrian
mars - Do 29.05.03 14:18
Mit QueryPerformanceCounter sind etwas abhängig von der Systemuhr bis zu einer Millionstel Sekunden möglich; das sollte also ausreichen.
TheD - Fr 30.05.03 23:07
| mars hat folgendes geschrieben: |
| Mit QueryPerformanceCounter sind etwas abhängig von der Systemuhr bis zu einer Millionstel Sekunden möglich; das sollte also ausreichen. |
Und das auf einem Windows-System?
:lol: :lol: :lol:
mars - Sa 31.05.03 10:14
Ich habe nicht gesagt, dass diese Zeiten wirklich etwas über die Performance einer Prozedur aussagen oder sich zum genauen Zeitmessen eignen, aber die genannte Funktion bringt dir wirlich so genaue Werte :!:
Ice - So 01.06.03 19:28
:D Vielen Dank für die vielen schnellen Antworten!
Ich habe es zwar nicht gelöst aber ich habe einfach den Timer auf die kleinste mögliche Periode eingestellt(0) und es funktioniert! 8)
Also vielen dank nochmal an alle...
mfg
Ice
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!