C++ 为什么循环使用更多cpu时为空?

C++ 为什么循环使用更多cpu时为空?,c++,cpu,C++,Cpu,我有两个程序,它们应该做相同的事情,但略有不同。两者都有无限的游戏循环,除非用户以某种方式停止游戏,否则将永远运行。其中一个程序的游戏循环被实现并呈现一些东西,另一个游戏循环是空的,什么也不做(只是监听用户停止) 当我打开任务管理器查看资源使用情况时,我发现带有空循环的程序使用了14%的CPU,而实际在屏幕上绘制内容的程序使用了大约1-2% 我对这个问题的猜测如下: 我比较了这两个程序的代码,并寻找差异,并没有太多。然后我想到,渲染到屏幕的循环可能会受到其他因素的限制(比如向屏幕发送像素,刷新率

我有两个程序,它们应该做相同的事情,但略有不同。两者都有无限的游戏循环,除非用户以某种方式停止游戏,否则将永远运行。其中一个程序的游戏循环被实现并呈现一些东西,另一个游戏循环是空的,什么也不做(只是监听用户停止)

当我打开任务管理器查看资源使用情况时,我发现带有空循环的程序使用了14%的CPU,而实际在屏幕上绘制内容的程序使用了大约1-2%

我对这个问题的猜测如下:

我比较了这两个程序的代码,并寻找差异,并没有太多。然后我想到,渲染到屏幕的循环可能会受到其他因素的限制(比如向屏幕发送像素,刷新率可能是多少?),所以在CPU完成它的工作后,它会将线程置于睡眠状态,直到其他工作完成。但由于其他程序几乎什么也不做,什么也不做也很容易,所以CPU从不让线程休眠,而是继续运行。我不知道这是否是原因,所以我问你。这就是发生这种情况的原因吗?(奖金问题)如果是这样的话,为什么CPU停止在14%左右,而不是一直达到100%


谢谢。

如果没有看到代码,很难说清楚,但是绘制到屏幕上,不可避免地需要等待IO;多少取决于许多因素,包括同步+缓冲选项


至于14%的cpu使用率-我猜您的机器有8个处理单元(核心或核心*超线程),您的代码是单线程的-即,它正在最大限度地使用一个处理单元。

可能空循环没有延迟间隔,这与绘图有关?
100/8==12.5
。我认为14%是巧合,在我的经验中,程序“空闲”窗口(我假设Windows是在任务管理器参考之后)在正确计算这些计算方面非常糟糕。此外,这里可能使用某种形式的包装层(SDL、directx等);这可能是正确的,在一个单独的实例上生成并运行,这很容易占到额外的百分比。可能,你是对的。然而,有太多未知因素需要考虑,给出一个明确的答案,尽管12.5%程序和1.5%系统空闲使得一些SENSEI认为您对8个处理单元部分是正确的。对于另一部分,我在空循环中加入了一个
Sleep(150)
调用,CPU使用率下降到0.1-1%。所以现在,我更确信造成这种情况的原因是,渲染循环在IO或其他一些操作时休眠,而空操作则不休眠。当然,我的电脑总有可能试图给我上一堂生活课“有时什么都不做比做某件事花费更多”:)谢谢您的时间。同时请记住,API引用并没有提供有关调用的全部信息。“渲染”将导致进行各种调用,正如您在这里了解到的,其中一些将是各种形式的睡眠/等待,您几乎无法控制。