高 CPU 使用 OpenGL Ver 3.1 + SDL2

High CPU Usage OpenGL Ver 3.1 + SDL2

在我的项目中,我使用 SDL2 + OpenGL Ver 3.1。有简单的代码。当我想清除缓冲区并开始在其中绘制时,函数 VPreRender() 被调用。之后,当我想在屏幕上显示这个缓冲区时,我使用函数 VPostRender()。这些函数在 while 循环中调用。 因此,当我 运行 我的程序在 10-20 分钟后 CPU 使用率高达 80-95%。如果我不调用这些函数,CPU 使用率为 10-15%。我做错了什么?为什么 CPU 使用率这么高?

bool SDLRender::VPreRender()
{
    glClear ( GL_COLOR_BUFFER_BIT );
}

bool SDLRender::VPostRender()
{
    SDL_GL_SwapWindow(m_pWindow);
}

您通常希望在某个深处休眠(尽管理想情况是通过条件变量来实现)以防止线程尽可能快地运行。否则,在单处理器机器上,您甚至会在没有任何休眠的空无限循环中将 CPU 的使用率提高到 100%。如果您的目标系统电池电量有限,这可能会很糟糕。

通常,GUI 系统会在其事件处理过程中隐含地执行此操作。 SDL_WaitEventTimeout,例如,应该这样做,并且仅在事件处理循环中使用超时值为 1 毫秒的那个,当无事可做时,CPU 的使用率可能会下降到几乎为零。

通常不建议手动休眠并重组事件循环以允许系统在适当的情况下在引擎盖下进行,但您也可以使用 SDL_Delay 手动休眠。有时手动控制在像游戏这样的实时应用程序中很有用,在游戏中成为控制狂可能很有用,但你必须小心不要让事件队列堆积起来。