elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mi programa WINAPI se come el 100% de la CPU. ¿Como lo reduzco?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Mi programa WINAPI se come el 100% de la CPU. ¿Como lo reduzco?  (Leído 953 veces)
Desiresportal

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Mi programa WINAPI se come el 100% de la CPU. ¿Como lo reduzco?
« Respuesta #10 en: 13 Octubre 2020, 22:52 »

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:

Código:
#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:

Código:
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.


En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.630


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Mi programa WINAPI se come el 100% de la CPU. ¿Como lo reduzco?
« Respuesta #11 en: 14 Octubre 2020, 00:09 »

De nada.


En línea

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
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines