我正试图强迫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而不是仅仅在一个循环中烘烤轮胎?我无法想象它完全没有这个功能。