我刚刚花了20分钟时间研究只是为了等待条件变为真的空循环。
我有一个名为"waitForLoaded"的函数,它是由CreateThread创建的线程。
这个函数:
void waitForLoaded(){
while(!isLoaded){
Sleep(500); // < my question
}
Sleep(500); //sleep another 500ms to ensure everything is loaded.
//continue on here
}
我正在使用Sleep(500)来减轻CPU负担,因为我认为使用0或1会耗尽处理器。
我在许多人的代码中看到了"Sleep(0)"的使用,但我从未理解为什么不完全不休眠,而是使用"while(condition){}.."。
我找不到任何关于哪个更加CPU友好的确定答案,所以我在这里问大家,使用0ms、1ms或500ms的忙等待有什么区别,哪个更加CPU友好。
在我看来,最好进行至少半个睡眠,对用户几乎不可察觉。
sleep(0)
至少会导致线程重新调度。它并不等同于“根本没有睡眠”。你睡多久由你决定。你代码中的最后一个睡眠是无意义的。 - user207421