我正试图强制 GLFW 3.0 停止对我的 CPU 进行核攻击,然后再将其作为一个框架来促进学习 API。我从http://www.glfw.org/documentation.html中获取了这个例子,并开始寻找限制它的方法。
目前,我的工作是这样的:
#include <iostream>
#include <chrono>
#include <thread>
#include <GLFW/glfw3.h>
int main(void)
{
typedef std::chrono::high_resolution_clock Clock;
typedef std::chrono::milliseconds milliseconds;
Clock::time_point currentTime, newTime;
milliseconds frameTime;
GLFWwindow* window;
if (!glfwInit())
return -1;
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
while (!glfwWindowShouldClose(window))
{
currentTime = Clock::now();
glfwSwapBuffers(window);
glfwPollEvents();
newTime = Clock::now();
frameTime = std::chrono::duration_cast<milliseconds>(newTime - currentTime);
if(frameTime.count() < 16)
std::this_thread::sleep_for(milliseconds(16 - frameTime.count()));
std::cout << "Frame time: " << frameTime.count() << "ms" << std::endl;
}
glfwTerminate();
return 0;
}
由于 GLFW 已经将自身限制为 60fps,我认为这可能会奏效。而且,确实,它在主循环运行时将我的 CPU 使用率减半。现在可能已经足够好了,但我真正想知道的是:
如何哄 GLFW 等待信号并释放 CPU,而不是仅仅在 while 循环上烤它的轮胎?我无法想象它完全没有这个功能。