Mi programa WINAPI se come el 100% de la CPU. ¿Como lo reduzco?

Iniciado por Desiresportal, 12 Octubre 2020, 15:57 PM

0 Miembros y 2 Visitantes están viendo este tema.

Desiresportal

Al final he probado varias cosas.

Primero, los frames tardan mas de 17 milisegundos en dibujarse, asi que es normal que haya menos de 60fps. Voy a reprogramarlo para hacer que use OpenGL.

Segundo, usando "Sleep()" en el codigo de ejemplo de arriba he reducido el uso de la CPU al 8% aproximadamente. (Core i5 6300HQ) La tarjeta grafica le ha acompañado cayendo al 0%. (GTX 950m)

Justo despues de declarar la variable "fullscreen" he añadido esto:

#include <time.h>
clock_t STARTING_CLOCK;

void ClockInit() {
STARTING_CLOCK = clock();
}

int GetElapsedTime() {
return (((((double)clock()) - ((double)STARTING_CLOCK)) / (double) CLOCKS_PER_SEC) * 1000);
}

bool DeltaTime(float lastUpdate, float margen) {
return (((GetElapsedTime() - lastUpdate) / 1000) >= margen);
}


Y despues en el "WinMain", en la parte donde se ejecuta "DrawGLScene()", lo he reemplazado por lo siguiente:

else {                       // Not Time To Quit, Update Screen
unsigned int frameTime = GetElapsedTime();
        DrawGLScene();              // Draw The Scene
        SwapBuffers(hDC);           // Swap Buffers (Double Buffering)
        unsigned int endFrameTime = GetElapsedTime();
if (endFrameTime - frameTime < 17) {
Sleep(17 - (endFrameTime - frameTime));
}
}


Con eso he logrado hacer la magia.

Muchas gracias por todo. Hasta la proxima.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón