Länge der Zeitscheibe in Windows abfragen



  • Moin,

    Für eine möglichst ressourcenschonende Realisierung einer Wartefunktion muss ich wissen, wie lang eine Zeitscheibe bei Windows ist. Kann man das mit einer Funktion abfragen?
    Ich will den Wert ungern hard-codieren.

    Viele Grüße


  • Mod

    Nein! Das wird sehr abstrakt gehand habt.
    http://support.microsoft.com/kb/259025

    Was neueres dazu kenne ich nicht, obwohl sich hier einiges geändert hat...

    Warum willst Du das wissen? Ich wüsste keinen Grund das in eigene Berechnungen einzukalkulieren. Benutze die OS-Wait Funktionen. Keine Schleifen, kein pollen, ab und zu Sleep(0) und das ist schon Ressourcen schonend.



  • Martin Richter schrieb:

    Warum willst Du das wissen? Ich wüsste keinen Grund das in eigene Berechnungen einzukalkulieren.

    Nun, ich versuche ein möglichst exaktes Timing (sofern das unter einem Nicht-RT-System wie Windows geht) hinzubekommen.

    Wenn ich zum Beispiel 48 ms warten will, kann ich keine Schleife á la

    while(currentTime < targetTime)
    {
        Sleep(1);
    }
    

    nehmen. Problem ist, dass Sleep(x) den Prozessor abgibt und erst in der nächsten Prozessorzuteilung meine Schleife verlassen wird. Dass verlängert die Wartezeit um mehrere ms.

    Mein Ansatz ist nun - um den Prozessor nicht durch sinnloses Pollen zu belasten - einen großen Teil der Zeit mit Sleep() zu warten. Und danach gehe ich in eine Polling-Schleife ohne Sleep(), die dann ziemlich exakt zum gewünschten Zeitpunkt verlassen wird:

    windows_time_slice = 10;
    Sleep(targetTime - currentTime - windows_time_slice);
    
    while(currentTime < targetTime)
    {
    }
    

    Damit komme ich auf Genauigkeiten von weniger als 0,1 ms. Das ist für meine Anwendung ausreichend. Nur eigentlich kann / sollte ich den Wert für die Zeitscheibe nicht hardcodieren.

    Oder gibt es im BS bessere/einfachere Funktionen, die meine Genauigkeit erfüllen?


Log in to reply