Ho un semplice ciclo di gioco utilizzando GLFW come segue (le finestre in modalità x64 Release)Perché il semplice programma glfw mangia tutte le CPU disponibili anche se il programma è inattivo (secondo Process Explorer)?
mi aspetterei il programma da eseguire molto rapidamente, ma a quanto pare il mio delta come calcolato sotto è sempre 16.667ms che sembrerebbe che glfw è in qualche modo limitando la velocità del mio ciclo principale. Questo non è un problema perché non mi interessa ottenere più di 60hz. Tuttavia, Process Explorer e Windows Task Manager segnalano che il mio programma utilizza la maggior parte del core della CPU.
In particolare, mangiare sembra che glfwSwapBuffers() mangi molta CPU, anche se non sto disegnando nulla. La rimozione di tale chiamata riduce l'utilizzo della CPU allo 0,5%.
Incidentalmente la mia funzione Sleep non viene quasi mai chiamata perché il delta è sempre vicino esattamente a 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);
}
}
}
Probabilmente dovresti aggiungere il tag 'Windows', poiché la tua domanda è specifica di Windows. –