Sleep()也是如此吗?

时间:2012-11-01 18:30:35

标签: windows performance winapi delay clock

那么,这两个是一样的吗? 在任务管理器中使用延迟CPU使用是疯狂的..这与系统空闲进程的情况相同吗?

#include <iostream>
#include <time.h>
//#include <windows.h>

int delay(long int time)
{
    clock_t beginning = clock();
    while(clock() - beginning < time) {}
    return 0;
}

int main()
{
    clock_t beginning = clock();

    begin:

    std::cout << "delay this by 1000ms\n";

    //Sleep(1000);
    delay(1000);

    goto begin; //i know, i know

    return 0;
}

1 个答案:

答案 0 :(得分:2)

这称为“忙碌等待”,并且绝对与调用Sleep()相同。睡觉会计划你的过程,以便其他过程有机会运行;忙碌的等待只会让CPU忙于无所事事,并减慢整个系统的速度。

“系统空闲进程”正在执行相同的操作,但只有在没有其他进程可以执行时才会进行调度。它可能比您编写的循环更节能。维基百科有interesting details关于如何以及为何的原因。