Timing bzw sleep unter xp
-
Hi
weis einer wie genau sleep unter xp auflöst? rein tehoretisch sollte das ja ms genau funktionieren. nur hab ich festgestellt das xp bei mir nur 7,quetsch ms intervalle macht.
soll heissen wenn ich sleep(5) aufrufe wartet er ca 7ms, bei sleep(8) sinds dan 14 ms genauso wie bei sleep(9) ,....ich sollt aber unter XP ein relativ genaues Timing realisieren ggf währe sogar eine Treiber implementierung möglich wenn ich dort gnaueres Timing hinbekomme.
falls jemand genaueres weis oder mir sagen kann wo ich sowas finde bitte melden.
grus Termite
-
wurde schon einmal vor ein paar wochen diskutiert.
ich würde einen counter nehmen bsp: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timerfunctions/queryperformancecounter.asp
un dann die entsprechenden ticks warten. und wenn es sehr genau sein soll kannst du auch den tickcounter "rdtsc" auf der cpu direkt nehmen.unsigned long long rdtsc() { unsigned long long nTick; // at&t syntax asm volatile("rdtsc" : "=A"(nTick)); return nTick; }
-
Oder den Multimedia-Timer : timeSetEvent () .
Der ist Millisekunden-genau (kann auch ungenauer eingstellt werden mit (timeGetDevCaps () und timeBeginPeriod () ).
Nicht vergessen:
mmsystem.h includen und winmm.lib einbinden.
Eine Einschränkung gibt es: es können nur 16 Instanzen aufgerufen werden (Returnwert kontrollieren beim Aufrufen von timeSetEvent () ).
timeKillEvent () nicht vergessen.Blackbird
-
Genaues Timing bekommst auf windows nicht hin. Windows ist kein realtime-os, d.h du hast keine garantie das dein thread inerhalb eine zeitspanne losarbeitet sobald dein timer auslöst.
Und wenn du noch so nen genauen zähler hast der dir bei 15,84511353342244ms auslösen kann, bringt dir das nix, da windows warten kann wie lange es will um deinen prozess cpu-zeit zu geben.
-
Danke mal für die Express beantwortung
gruss Termite