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:
- 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 )
- Schauen, wie Zeiten wie 187, 171, 156 etc. ins Konsolenfenster ausgegeben werden.
- Windows sounds abspielen, zb. über die Sound-Einstellungen in der Systemsteuerung ( http://daiw.de/share/PlaySound.jpg )
- 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?
- 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.