Mikrosekunden Sleep



  • Hi zusammen,

    bastle mir gerade eine Win32-Konsolenanwendung.
    Ich bräuchte jetzt eine Funktion um im einen oder anderen Thread einen Sleep im Mikrosekundenbereich.
    Auf Unix/Linux System verwende ich hierzu usleep. Gibts eine gleichartige funktion auch für eine Win32-Konsole



  • Nimm doch Sleep() (mit großem S am Anfang)



  • CStoll schrieb:

    Nimm doch Sleep() (mit großem S am Anfang)

    würd ich ja wenn ich einen miLLI-sekunden sleep bräuchte
    ich brauche aber einen miKRO-sekunden sleep



  • Wozu brauchst du denn soo kurze Ruhepausen? Da dauert ja der Funktionsaufruf fast länger als die Schlaf-Pause.



  • Für so kurze Zeiträume kannst du nur busy warten, das heißt in einer Schleife. Macht aber unter Windows nur begrenzt Sinn, weil du sowieso überhaupt nicht weißt, wann das Betriebssystem dir wie viel Rechenzeit gibt. Es kann sein, dass du anfängst zu messen, dann darf ein anderes Programm arbeiten und die erste Messung die du machst, sagt schon 2ms...



  • Optimizer schrieb:

    Für so kurze Zeiträume kannst du nur busy warten, das heißt in einer Schleife. Macht aber unter Windows nur begrenzt Sinn, weil du sowieso überhaupt nicht weißt, wann das Betriebssystem dir wie viel Rechenzeit gibt. Es kann sein, dass du anfängst zu messen, dann darf ein anderes Programm arbeiten und die erste Messung die du machst, sagt schon 2ms...

    man könnte was von dem code: http://wookey.org/usermodehardwareportio.html
    benutzen, um sich den IOPL hochzusetzen, dann mit einer CLI-instruction alle interrupts temporär abschalten (sollte auch den scheduler stoppen), dann die mikrosekunden busy-waiten und zum schluss alles wieder herstellen (STI usw.).
    🙂



  • Ist zwar "nett" (eigentlich das Gegenteil von nett), aber so wie es aussieht, haben anscheinend nicht mal Administrator-Konten standardmäßig die dafür notwendigen Privilegien. Zu einem guten Gast machst du dein Programm damit jedenfalls nicht.



  • zumal was hat so eine kurze "wait"time für einen sinn ?



  • Meinst du sowas?

    Dauer ist in 1/1000 Sekunden

    void sleep(long dauer)
    {
    	if ( dauer < 1 )
    		;
    	else
    	{
    		long tstart = clock();
    		long tend = 0;
    
    		while ( (tend - tstart) < dauer )
    			tend = clock();
    	}
    }
    

Anmelden zum Antworten