500ms Schläfchen von Windows XP bei PlaySound()?



  • Hallo zusammen,

    ein passenderes Unterforum hab ich leider nicht gefunden. 😉
    Also, Windows XP 32 bit (SP3) verhält sich bei mir auf verschiedenen multicore-Rechnern (bei single-core konnte ich den Effekt nocht nicht beobachten) wie folgt:

    Ich lasse ein kleines Programm laufen, dass einfach die CPU sinnlos beschäftigt und ausgibt, wie lang es im Schnitt für einen Durchgang benötigt. Z.B. sowas hier:

    #include <chrono>
    #include <iostream>
    #include <vector>
    void WasteTime()
    {
        std::vector<int> vec( 16777216, 42 );
        for ( int i( 0 ); i < 8; ++i )
    		for ( auto it( vec.begin() ); it != vec.end(); ++it )
                *it = (*it + 13)/2;
    }
    int main( int argc, char* argv[] )
    {
    	for (;;)
    	{
    		auto start(std::chrono::system_clock::now());
    		WasteTime();
    		auto end(std::chrono::system_clock::now());
    		int elapsed_milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count();
    		std::cout << "elapsed time in ms: " << elapsed_milliseconds << "\n";
    	}
    	return 0;
    }
    

    Ausgabe:

    elapsed time in ms: 187
    elapsed time in ms: 171
    elapsed time in ms: 171
    elapsed time in ms: 156
    elapsed time in ms: 156
    elapsed time in ms: 171
    elapsed time in ms: 171
    elapsed time in ms: 171
    elapsed time in ms: 156
    elapsed time in ms: 156
    elapsed time in ms: 171
    elapsed time in ms: 171
    elapsed time in ms: 156
    elapsed time in ms: 171
    elapsed time in ms: 171
    

    Wenn ich aber zwischendurch Sounds in Windows abspiele, beispielsweise durch Klicken hierdrauf (http://daiw.de/share/PlaySound.jpg), dann wird mein Programm manchmal für 500ms schlafen gelegt:

    elapsed time in ms: 171
    elapsed time in ms: 156
    elapsed time in ms: 156
    elapsed time in ms: 171
    elapsed time in ms: 171
    elapsed time in ms: 656
    elapsed time in ms: 171
    elapsed time in ms: 171
    elapsed time in ms: 156
    elapsed time in ms: 656
    elapsed time in ms: 171
    elapsed time in ms: 656
    elapsed time in ms: 156
    elapsed time in ms: 171
    elapsed time in ms: 171
    

    Die fiesen Stellen (Sechshundertirgendwas) kommen recht häufig wenn man wie irre auf den Play-Button einprügelt.
    Falls ihr auch noch ne Karre mit XP drauf habt: Könnt ihr mal testen, ob sich das bei euch genauso verhält? 🙂

    edit: Falls jemand versuchen will, diesen Effekt zu reproduzieren, mein Test-Programm nutzen will, es aber nicht kompiliert bekommt, kann er die fertige exe hier runterladen: http://daiw.de/share/PrintCalculationTimes.zip



  • Sorry fürs Pushen, aber wär cool, wenn das mal eben jemand von euch für mich ausprobieren könnte. Vielleicht hab ich ja auch schlecht beschrieben, wie man das macht, also:

    1. PrintCalculationTimes.exe (das kleine Testprogramm, zu dem ich den source code gepostet hatte) ausführen (gibt es auch als exe hier: http://daiw.de/share/PrintCalculationTimes.zip )
    2. Schauen, wie Zeiten wie 187, 171, 156 etc. ins Konsolenfenster ausgegeben werden.
    3. Windows sounds abspielen, zb. über die Sound-Einstellungen in der Systemsteuerung ( http://daiw.de/share/PlaySound.jpg )
    4. Schauen, ob sich die Zeiten vom Testprogramm dabei verändert haben. Sind sie bei 187, 171, 156 etc. geblieben oder sind sie auf zb. 187, 656, 156 hochgegangen?
    5. Wenn einige davon um grob 500 größer geworden sind, ist das Problem reproduziert. Wenn nicht, dann hat der Test-PC das Problem vermutlich nicht.

Anmelden zum Antworten