C++ 在我简单的2D DirectX游戏中,有没有办法减少CPU和GPU的负载?

C++ 在我简单的2D DirectX游戏中,有没有办法减少CPU和GPU的负载?,c++,timer,load,directx,C++,Timer,Load,Directx,我想我需要解释一下: 我对游戏编程相当陌生,所以如果我不能立即理解一个概念,请不要生气 这个游戏使用DirectX 10,是用C编写的++ 这是一个非常简单的2D游戏 情况:尽管游戏逻辑和图形都非常简单,但我的CPU和GPU负载仍然达到100%。甚至菜单也以每秒2000帧以上的速度显示 我的问题不在于游戏跑得太快。我已经使用QueryPerformanceCounter函数对精灵动画和游戏逻辑进行了计时 实际问题是,游戏多次计算相同的代码,而屏幕上没有任何事情发生,因此给我的硬件带来了巨大的

我想我需要解释一下:

  • 我对游戏编程相当陌生,所以如果我不能立即理解一个概念,请不要生气
  • 这个游戏使用DirectX 10,是用C编写的++
  • 这是一个非常简单的2D游戏
情况:尽管游戏逻辑和图形都非常简单,但我的CPU和GPU负载仍然达到100%。甚至菜单也以每秒2000帧以上的速度显示

我的问题不在于游戏跑得太快。我已经使用QueryPerformanceCounter函数对精灵动画和游戏逻辑进行了计时

实际问题是,游戏多次计算相同的代码,而屏幕上没有任何事情发生,因此给我的硬件带来了巨大的负载


我可以通过什么方式减少游戏的硬件负载?我觉得使用睡眠是一种“欺骗”

只是一个简单的建议:

每次进入游戏循环时,计算自上次进入以来经过的时间。
如果这个时间低于给定的阈值,只需返回而不进行任何处理

感谢Damon为我指出了正确的方向,我研究了当前函数。()

解决CPU和GPU负载问题所需的一切都在改变

swapChain->Present(0, 0);


如果你的硬件真的有那么多的处理要做,那么它在全速运行时有什么问题?你可以按照你的建议限制你的帧速率。你可以简单地打开vsync…我不知道怎么做。主要问题是,它每秒在整个游戏循环中运行2000次以上,而只有60次就足够了。请参阅和<代码>D3D当前\u间隔\u一是您想要的。除非您的显示器刷新率为2000 Hz(不太可能),否则这会将您的帧速率降低到合理的水平。除了,如果您在驱动程序设置中设置了“force vsync off”(那么应用程序就没有运气了)。至于使用
Sleep
,这不是“欺骗”,而是不明智的
Sleep
是不可靠的,它的默认分辨率对于任何希望以交互速率显示内容的应用程序来说都太粗糙了。你给我指出了正确的方向Damon!)我希望有办法在这里投票。我将把解决方案发布到更下面。感谢Damon为我指出了正确的方向,我研究了当前函数。(Present(0,0);to swapChain->Present(1,0);也许您应该自己添加一个答案(一些示例代码可能会更好),并接受您自己的答案,以表明您的问题已经得到了回答。
swapChain->Present(1, 0);