Sleep() und Windows8
-
Ich habe eine Kommunikations-DLL (C++). In dieser läuft ein Thread, der eine USB-Schnittstelle pollt. Im Thread ist auch ein Befehl sleep(2), der ein Warten von 2ms bewirken soll. Bei einem Windows8-PC habe ich jetzt plötzlich Probleme. Das sleep dauert hier viel länger (ein sleep(2) ca. 11ms, ein sleep(20) etwa 31ms). An der Hardware kann es nicht liegen. Für Tests wird hier ein PC mit verschiedenen Betriebssystemen auf Wechselplatte genutzt.
Erste Idee war, dass Windows8 bei Sleep einen Taskwechsel macht und wenigstens für 10ms die Kontrolle dem anderen Prozess gibt. Aber das Problem habe ich auch bei sleep(20).
Irgend jemand eine andere Idee?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
-
Per Default ist ein Time-Slice bei Windows 10-16 ms!
Willst Du es kürzer, so kannst Du "timeBeginPeriod(1)" aufrufen; was aber dazu führt, dass der Rechner wesentlich mehr Scheduled und somit im Endeffekt weniger arbeiten kann. Es führt aber auch dazu, dass Deine Anwendung schneller reagiertSiehe dazu auch die Doku:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd757624This function affects a global Windows setting. Windows uses the lowest value (that is, highest resolution) requested by any process. Setting a higher resolution can improve the accuracy of time-out intervals in wait functions. However, it can also reduce overall system performance, because the thread scheduler switches tasks more often. High resolutions can also prevent the CPU power management system from entering power-saving modes. Setting a higher resolution does not improve the accuracy of the high-resolution performance counter.
-
Bei solchen Threads kommt eigentlich immer die Antwort "Windows ist kein Echtzeit-Betriebssystem".