在过去的20分钟里,我一直在研究空循环,其目的只是为了等待一个条件成为现实。
我有一个名为"waitForLoaded“的函数,它是由CreateThread创建的线程。
函数:
void waitForLoaded(){
while(!isLoaded){
Sleep(500); // < my question
}
Sleep(500); //sleep another 500ms to ensure everything is loaded.
//continue on here
}我使用睡眠(500)在CPU上很容易,因为我相信使用0或1都会耗尽处理器。
我在许多人的代码中看到过“睡眠(0)”的用法,我从来不明白为什么不是根本不睡觉,而是做“while(Condition){}”。
我找不到任何可靠的答案,所以我问这里的人,忙碌-等待0ms,1ms或500ms和哪个更CPU友好有什么区别。
在我看来,最好是至少进行半睡眠,这几乎不会被用户注意到。
发布于 2015-01-15 13:23:23
在windows上,睡眠(0)不会花费任何时间休眠,但允许操作系统将CPU释放给另一个等待的线程。这有点像是在说:“如果有人在排队,就让他们先走吧,否则我想马上就走。”
发布于 2015-01-15 13:30:56
围绕事件或类似事件的简单同步原语将消耗较少的CPU,并且您的线程有望在最坏的情况下以500ms的等待时间更快地开始工作。
发布于 2015-01-15 13:25:36
如果我理解你的问题,你是在问哪种等待方法更好:
sleep(500)sleep(1)sleep(0)// (do nothing)如果你有时间买一台sleep(500),那么答案是"sleep(500)“
https://stackoverflow.com/questions/27957229
复制相似问题