线程死循环中的sleep,误差10ms以上

发布时间 2023-10-26 18:01:56作者: 夕西行

线程函数里是死循环,其中需要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博客