SDL Me consume mucha CPU en XP y en Vista se cuelga!

Hola a todo el mundo :)

Estoy en mis inicios con SDL y me gustaría hacer un juego para PC, concretamente una aventura gráfica.

Estoy usando C++ junto con SDL. He hecho algún programita así sencillo (movimiento de personaje y poco más), pero siempre tengo el mismo problema:

Al ejecutarlo me consume aproximadamente el 50 % de CPU en Win XP, y en Windows Vista directamente se resetea el PC.

¿Cómo puedo solucionar el problema? ¿Tengo que hacer uso de SDL_Delay() o de sleep() en cada iteración del bucle principal o algo así?

Muchas gracias
MouTio escribió:¿Tengo que hacer uso de SDL_Delay() o de sleep() en cada iteración del bucle principal o algo así?

Muchas gracias

Si, puedes poner SDL_Delay(1) en cada frame, que ya estás diciendole al SO que conmute el proceso. Lo que no tengo ni idea idea es porque se te cuelga en Vista 64 Oooh
Vale, ya tengo solucionado lo del SDL_Delay :)

Ya no gasta tanta CPU, pero en Vista sigue reseteandose :(

Uso las 4 librerias estas: SDL, SDL_image, SDL_mixer y SDL_ttf

¿Alguna es incompatible con Vista?

Aquí una captura del pantallazo que da nada mas ejecutar el programa en Vista:

Imagen
:O

seguro que no estas teniendo fugas de memoria? algún bucle infinito de creación de objetos o algo por el estilo?
Ya he solucionado el problema. Me he bajado las bibliotecas de SDL actualizadas y he compilado con ellas. Ahora el ejecutable generado ya no da problemas en Vista :)

Desde luego... si todos los problemas del vista se solucionaran así... xD

PD: La versión de las bibliotecas con las que estaba compilando antes eran del 2004 [carcajad]
Me está volviendo a hacer lo del pantallazo azul en Vista. No entiendo nada }:/
¿Has solucionado bien lo del consumo de CPU? Yo he hecho un servidor TCP y al ejecutarlo (en linux) en top me muestra un consumo del 90% de cpu (aunque el pc va sin problemas de fluidez, y en la carga total me pone que la CPU está cargada un 10%)...
Lo del pantallazo lo he solucionado ya compilando desde el proyecto en lugar de compilar desde el workspace de codeblocks (es raro pero así funciona)

Y sí, he solucionado lo de la CPU también:

Declaro estas variables globales:
Uint32 ini_milisegundos, fin_milisegundos, frametime;


Implemento estas funciones:
void ResetTimeBase() {
ini_milisegundos=SDL_GetTicks();
}
int CurrentTime() {
fin_milisegundos=SDL_GetTicks();
return fin_milisegundos-ini_milisegundos;
}


En el bucle principal lo primero que hago es:
ResetTimeBase();


y lo último que hago es:
frametime=CurrentTime();
if (frametime<30){
SDL_Delay(30-frametime);


Y ya está, con eso me funciona perfectamente. Espero que te sirva. Saludos
7 respuestas