Nombre de usuario:  
Contraseña:     
Regístrate Ayuda Lista de miembros Calendario Mensajes nuevos Mensajes de hoy Búsqueda

Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
SDL Me consume mucha CPU en XP y en Vista se cuelga!
21-01-2009, 04:06 AM (Este mensaje fue modificado por última vez en: 21-01-2009 04:25 AM por MouTio.)
Mensaje: #11
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
Pero si hacemos eso, en realidad el tiempo de procesar todo el bucle principal es tiempo perdido que se le suma. Entonces en lugar de limitar a 30 FPS estariamos limitando a menos!! (A no ser que el tiempo de procesamiento del bucle sea inferior a 1 ms, con lo que sería despreciable. ¿es posible?)

¿Me entiendes o estoy equivocado yo?

París en otoño, los últimos meses del año y el final del milenio. Guardo muchos recuerdos de la ciudad; los cafés, la música, el amor y la muerte
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
21-01-2009, 09:51 AM (Este mensaje fue modificado por última vez en: 21-01-2009 09:56 AM por Zangetsu.)
Mensaje: #12
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
Importante, sabes que tiempo mide la función? es decir, segundos, milisegundos o que? xDD
Es que por ejemplo el Sleep el número que le metes son milisegundos xD
Entonces usas la función SDL_FreeSurface al final para liberar las imagenes no?

Esperando lan-party casa del alumno!!
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
21-01-2009, 12:23 PM (Este mensaje fue modificado por última vez en: 21-01-2009 12:24 PM por MouTio.)
Mensaje: #13
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
SDL_Delay está en milisegundos, sleep está en segundos, usleep está en milisegundos

Para el caso, utilizo SDL_Delay, ya que estoy con SDL.

Sí, libero así las imágenes, Zangetsu.

klondike, no acabo de entender lo de SDL_Delay(1/30) para limitar a 30 los fps. ¿Esto es cierto? Confused

París en otoño, los últimos meses del año y el final del milenio. Guardo muchos recuerdos de la ciudad; los cafés, la música, el amor y la muerte
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
21-01-2009, 01:45 PM (Este mensaje fue modificado por última vez en: 21-01-2009 01:46 PM por Zangetsu.)
Mensaje: #14
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
Perdona pero creo que Sleep está en milisegundos xD
Tio lo que tienes que hacer es hablar con chuel o jaime, ellos te podrán decir cosas no inventadas xD

Esperando lan-party casa del alumno!!
Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
21-01-2009, 04:44 PM
Mensaje: #15
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
(21-01-2009 01:45 PM)Zangetsu escribió:  Perdona pero creo que Sleep está en milisegundos xD
Tio lo que tienes que hacer es hablar con chuel o jaime, ellos te podrán decir cosas no inventadas xD

Sleep puede estar en segundos (UNIX) o en milisegundos (incompatible aka Windows).

Lo suyo es mirar la referencia de SDL a ver que dice.
http://www.libsdl.es/wiki/doku.php?id=sdl_api:sdl_delay

SDL_Delay(1/fps*1000);

De todas formas, mira que no garantiza que espere ese tiempo.

"Hola mundo\n"
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
21-01-2009, 08:21 PM
Mensaje: #16
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
Una pregunta.

¿La funcion atexit para qué sirve?

He visto esto: http://c.conclase.net/librerias/funcion.php?fun=atexit

pero no lo tengo del todo claro. ¿Se supone que al llamar a atexit se cierra luego el programa?

París en otoño, los últimos meses del año y el final del milenio. Guardo muchos recuerdos de la ciudad; los cafés, la música, el amor y la muerte
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
21-01-2009, 10:09 PM
Mensaje: #17
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
(21-01-2009 08:21 PM)MouTio escribió:  Una pregunta.

¿La funcion atexit para qué sirve?

He visto esto: http://c.conclase.net/librerias/funcion.php?fun=atexit

pero no lo tengo del todo claro. ¿Se supone que al llamar a atexit se cierra luego el programa?
Permite añadir una función para que se ejecute antes de la finalización (normal) del programa.

"Hola mundo\n"
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
23-01-2009, 08:44 PM (Este mensaje fue modificado por última vez en: 23-01-2009 08:47 PM por MouTio.)
Mensaje: #18
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
(21-01-2009 04:44 PM)klondike escribió:  SDL_Delay(1/fps*1000);

Suponiendo que fps=30, esto sería SDL_Delay(1/30*1000); =

SDL_Delay(1/30000);

Esto significa que a cada iteración, paramos 0.0003 ms

Teniendo en cuenta que en cada iteración mostramos 1 frame, cuando llevemos 30 frames habremos "descansado" 0.001 ms (esto y nada viene a ser lo mismo, xD)


No le veo el sentido a la fórmula que me has dado... a lo mejor la he interpretado mal.

París en otoño, los últimos meses del año y el final del milenio. Guardo muchos recuerdos de la ciudad; los cafés, la música, el amor y la muerte
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
23-01-2009, 09:12 PM (Este mensaje fue modificado por última vez en: 23-01-2009 11:19 PM por klondike.)
Mensaje: #19
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
(23-01-2009 08:44 PM)MouTio escribió:  No le veo el sentido a la fórmula que me has dado... a lo mejor la he interpretado mal.
Es lo que pasa cuando no sabes usar la precedencia de los operadores
1/30*1000 != 1/(30*1000)

Existe otra fórmula un poquito más compleja.
t1=Coje el tiempo actual (a ser posible en milisegundos)
Código vario
t2=Coje el tiempo actual (a ser posible en milisegundos)
SDL_Delay(1/30*1000+t1-t2);

Así, tienes en cuenta casi todo el tiempo de procesamiento. De todas formas ten encuenta que no se garantiza que vayan a pasar msec segundos sino que a veces pueden pasar más. Para ello habría que tener en cuenta el tiempo de más añadido por el SO con una fórmula un poco más compleja.

Bueno, este es el código de la función guay:
Código:
int espera = 1000/FPS; //El tiempo solo va con enteros
int errorfps = 1000%FPS; //error añadido cada FPS ciclos
int fpsc = 0;
ticksantes=SDL_GetTicks();
tickantes+=espera;
BUCLE
CODIGO
ticks=SDL_GetTicks();
dormir=ticksantes-ticks;
if(dormir>0) {
  SDL_Delay(dormir);
  ticksantes+=espera; //Hasta el próximo ciclo Lucas
  fpsc++;
  if  (fpsc == FPS) {
    tickantes+=errorfps;
    fpsc = 0;
  }
} else {
  ticksantes=SDL_GetTicks();
  fpsc = 0;
  cerr << "Mierda, necesitamos más velocidaaaaaaaad\n"
  tickantes+=espera;
}
FIN BUCLE

"Hola mundo\n"
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
27-01-2009, 07:32 PM
Mensaje: #20
RE: SDL Me consume mucha CPU en XP y en Vista se cuelga!
Ya he solucionado el problema del Vista. Resulta que estaba compilando todo este tiempo con unas bibliotecas del 2004. Simplemente he actualizado las bibliotecas de desarrollo desde la página oficial de SDL y ya funciona el ejecutable en Vista.

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

París en otoño, los últimos meses del año y el final del milenio. Guardo muchos recuerdos de la ciudad; los cafés, la música, el amor y la muerte
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
Enviar respuesta