precision timer funktionen
-
ich bin auf der Suche nach extrem genauen timer-funktionen, also auf jeden Fall besser als die microsoft multimedia dinger. wie TimeGetTime() oder wie die heißen. Also kurz gesagt: ich will etwas, was besser ist, als mikrosekundengenauigkeit und crossplatform. wo kriegt man sowas? und wenn man es nicht umsonst bekommt, wie kann ich mir das selber schreiben? und achja nochwas: was ist das genaueste, was ich aus einem Computer theroertisch herausholen könnte?
-
Hier, versuch das mal: http://www.c-plusplus.net/forum/viewtopic.php?t=70061 Ist aber leider nicht Cross-Plattform ... naja und das genaueste .. theoretisch ist das doch prozessorabhängig, oder ?
Müsste man aber auch irgendwie selber machen können...
vielleicht könnte man eine schleife bauen, die z.b in einer
millisekunde 100 mal durchlaufen werden soll... dann hätte man schonmal
eine 100 -fach kleinere Einheit als die millisekunde (nur so ne Idee ...
wie es mit der Umsetzung klappt, muss man ausprobieren)
-
mit microsekunden kannst du eh nicht richtig rechnen, da brauchst du nen Echtzeit-OS und dann hängt die mögliche Zeit-Auflösung noch von der Hardware ab. Ich glaub auf x86er Systemen ist genauer als 4ms (oder war das noch mehr) gar nicht möglich und erst recht nicht wenn man kein Echtzeit-OS einsetzt.
-
d.h. unter windows/linux kann man das mit anderen Worten "vergessen", da bei diesen Betriebssystemen ein Chaos herrscht, was die Reihenfolge der Befehle an dn prozessor angeht? hba ich ds richtig verstanden?
gibt es nicht vielleiht irgendeine Möglichkeit, mit der ich einen Befehl unter windows an den Beginn der eventqueue setzen kann? mal angenommen, daß windows mit 7 usec (ich glaub ich hab mal sowas gelesen) getaktet wird, und ich es schaffe jedesmal mein befehl an den beginn der eventqueue zu setzen, dann müsste ich doch durch eine Schleife wie Richi meinte theoretisch eine noch viel höhere Auflösung erreichen oder? kann ich sowas erreichen, indem ich einen prozess mit der höchsten prozesspriorität starte?
-
Die High Resolution Timers, die ich im anderen Thread gepostet habe, sind das genaueste, was es unter Windows gibt, da diese dir die Anzahl der Taktzüklen zurückliefert (IIRC)...
-
yeus schrieb:
d.h. unter windows/linux kann man das mit anderen Worten "vergessen", da bei diesen Betriebssystemen ein Chaos herrscht, was die Reihenfolge der Befehle an dn prozessor angeht? hba ich ds richtig verstanden?
...
Na dann wuerden beide Systeme auf keinem Rechner der Welt laufen, wenn die
Befehle in einem "Chaos" an den Prozessor geschickt werden.mfg
v R
-
oder wnnn man es gerne "unverdünnt" hat:
DWORD dwLowOrderStart = 0; DWORD dwHighOrderStart = 0; void GetStartTicks(void) { __asm { rdtsc mov dwLowOrderStart, eax mov dwHighOrderStart, edx } }
Da gab es auch mal 'nen coolen Thread im Assembler - Forum. Einen guten Link zu Timern generell gab es auf codeproject.com (kann leider gerade nicht schauen wo dort genau).