線程死循環中的sleep,誤差10ms以上

線程函數裏是死循環,其中需要sleep 1ms,即1ms週期執行死循環。但是經示波器測試發現至少10ms以上。

【已測試的方法】

Sleep(1);   //Windows api

WaitForSingleObject(hThread, 1); //Windows api

std::this_thread::sleep_for(std::chrono::milliseconds(1));  //c++ api

【原因分析】

sleep 1,暫停它至少1毫秒。即告訴操作系統將線程放入睡眠隊列中,一旦過了1毫秒,就應該認爲該線程有資格再次執行。但這仍然取決於操作系統是否能調度您的線程,這可能需要另外10ms (或更多,或更少,取決於各種因素)。

【結論】

目前沒有發現精準辦法,sleep是爲了降低cpu消耗。

【參考】

Sleep(1)不準,實際延時16ms_sleep時間不準_無瑕劍客的博客-CSDN博客

c++11 this_thread::sleep_for至少十幾毫秒的解決辦法_c++ sleep_for 最小時間-CSDN博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章