gpt4 book ai didi

c++ - 为什么即使程序处于空闲状态(根据进程资源管理器),简单的 glfw 程序也会占用所有可用的 CPU?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:16 26 4
gpt4 key购买 nike

我有一个使用 GLFW 的非常简单的游戏循环,如下所示(windows x64 Release模式)

我希望程序执行得非常快,但看起来我的增量如下计算的总是 16.667 毫秒,这似乎是 glfw 以某种方式限制了我的主循环的速度。这不是问题,因为我不关心超过 60hz。但是进程资源管理器和 Windows 任务管理器报告我的程序正在使用大部分 cpu 核心。

特别吃 glfwSwapBuffers() 似乎吃了大量的 cpu,即使我什么也没画。删除该调用会将 CPU 使用率降至 0.5%。

顺便说一句,我的 Sleep 函数几乎从未被调用过,因为增量总是接近 16.6ms。

main ()
{
double prevTime = glfwGetTime();
//init glfw ..
while(!glfwWindowShouldClose(window))
{
double time0=glfwGetTime();
double delta = time0- prevTime;

if (delta >= g_FrameInterval)
{
glfwPollEvents();
prevTime= time0;
glfwSwapBuffers(window);
}
else
{
Sleep(10);
}
}
}

最佳答案

glfwSwapBuffers 正在等待监视器垂直同步。这就是为什么您的循环以 60 Hz(即显示器刷新率的频率)运行的原因。至于高 CPU,操作系统可能不会让您的进程进入休眠状态。这可能会导致它错过 vsync,因为它无法足够快地唤醒。取而代之的是,CPU 处于繁忙的循环中,直到 vsync。这是一个more full explanation的问题。

关于c++ - 为什么即使程序处于空闲状态(根据进程资源管理器),简单的 glfw 程序也会占用所有可用的 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com