【问题标题】:So is Sleep() and this the same?那么 Sleep() 和 this 一样吗?
【发布时间】:2012-10-22 09:51:33
【问题描述】:

那么,这两个是一样的吗? 在任务管理器中使用延迟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;
}

【问题讨论】:

  • 为什么要使用label: ... goto label; 而不是while (1) { ... }
  • 反正我也不打算过度使用 goto..
  • 是的,这就是为什么我建议用一个代替另一个。但是goto 版本是晦涩难懂的,完全没有理由。您甚至可以为自己保存 //i know, i know 评论。我不是在宣扬 goto 禁欲(在 C 中),我对迂回的做事方式感到震惊。

标签: windows performance winapi delay clock


【解决方案1】:

这被称为“忙于等待”,并且绝对与调用Sleep() 相同。睡眠将重新安排您的进程,以便其他进程有机会运行;忙于等待只会让 CPU 忙于无用,并减慢整个系统的速度。

“系统空闲进程”正在做同样的事情,但它只在没有其他进程有工作要做时才被安排。它可能也比您编写的循环更节能。维基百科有 interesting details 说明如何以及为什么。

【讨论】:

  • 繁忙的等待会导致您的 CPU 飙升至 100%,可能会导致其他进程处于饥饿状态。
  • 非常感谢,一直不知道这叫什么:)
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多