Bennu Game Development

Foros en Español => Sugerencias => Mensaje iniciado por: DCelso en Diciembre 11, 2010, 11:37:47 am

Título: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 11:37:47 am
SplinterGU, ¿Sería mucho pedir un control de señal de parada en el bgdi?
Resulta que muchos ejemplos que pruebo no tengo manera de pararlos, no funciona ni el control C ni el killall, y claro tengo que estar buscando un kill -9, con el engorro que eso conlleva.
Sería meterle al main de bgdi con manejador de SIGINT y ya funcionaría el control C (desde la consola que ejecutó bgdi) y el killall.
Algo como esto.
Código: [Seleccionar]
#include  <stdio.h>
#include  <signal.h>

void     INThandler(int);

void  main(void)
{
     signal(SIGINT, INThandler);
    //... tu código //
}

void  INThandler(int sig)
{
          exit(0);
          signal(SIGINT, INThandler);
}

Gracias de antemano.
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 01:42:05 pm
la idea es que no funcione el control+c, no recuerdo juego comercial que lo tenga.

deberias incluir en tu juego alguna combinacion de teclas (puede ser control+c) para salir.
Título: Re: control de señal de parada para bgdi
Publicado por: Yawin en Diciembre 11, 2010, 01:59:50 pm
la idea es que no funcione el control+c, no recuerdo juego comercial que lo tenga.

deberias incluir en tu juego alguna combinacion de teclas (puede ser control+c) para salir.

Sin embargo, muchos juegos de los 80-90 (como el prince of persia) se cerraban con el ctrl+Q
Título: Re: control de señal de parada para bgdi
Publicado por: DjSonyk en Diciembre 11, 2010, 02:39:22 pm

Sin embargo, muchos juegos de los 80-90 (como el prince of persia) se cerraban con el ctrl+Q

El juego deveria tener una opcion en el menu de opciones para salir directamente del juego,como hacen muchos juegos actualmente,nunca vas a saber las preferencias del usuario a la hora de elegir combinaciones de teclas para jugar...
Aunque para el caso de Dcelso estaria bien para modo debug ,pero como bien a dicho Splinter basta con incluir un metodo/función con la combinacion.
De todas formas creo que Dcelso se refiere a una pausa en el codigo no una salida,pero solo creo.De ser asi la verdad es que es muy buena idea...
Título: Re: control de señal de parada para bgdi
Publicado por: panreyes en Diciembre 11, 2010, 02:58:07 pm
Creo que DCelso no se refiere exactamente a eso.

No sé como funciona en Windows, pero en Linux hay varias formas de matar un proceso.
Entre otras: avisarle de que se vaya muriendo (TERM), pedirle amablemente que se mate (KILL) y bazokazo a los ojos (KILL =<-9 o también conocido como FUCK YOUR SINS IM OUTTA HERE) xD

Actualmente para finalizar un proceso de Bennu en Linux hay que utilizar kill -9, que es el bazokazo a los ojos.
Lo ideal sería poder cerrarlo con el TERM.

Tengo entendido que el control+c no funcionaría en la ventana de Bennu, sino en la consola. ¿Puede ser?

http://es.wikipedia.org/wiki/Kill
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 02:59:23 pm
la idea es que no funcione el control+c, no recuerdo juego comercial que lo tenga.

deberias incluir en tu juego alguna combinacion de teclas (puede ser control+c) para salir.
Me sorprende que no sepas esto, no es el control c desde el juego, sino desde la consola que lo lanzó (su proceso padre), y todas, absolumantente todas o casi todas las aplicaciones windows y linux traen este control hoy en día.
Título: Re: control de señal de parada para bgdi
Publicado por: panreyes en Diciembre 11, 2010, 02:59:37 pm
De todas formas creo que Dcelso se refiere a una pausa en el codigo no una salida,pero solo creo.De ser asi la verdad es que es muy buena idea...
Eso ya lo tienes en Linux, pulsando crtl+z en la consola de linux desde la cual has ejecutado bennu :)
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:05:05 pm
sasto :D.
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:08:20 pm
y para recuperarlo pones fg (o bg si lo quieres mandar a background)
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 03:12:34 pm
no todos los programas permiten control+c desde consola, lo siento...
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:20:12 pm
:D. como cuales, solo conozco uno que no lo haga, para una buena programación ya sea de una apliación como de un servicio (o daemon) es importante poder controlar las señales del sistema ya que así podremos interactuar desde el sistema con él y poder salir de una forma correcta con aplicaciones como signal o kill, además la señal SIGINT es altamente recomendable controlarla porque es la que el sistema envía cuando quiere pedir a un programa que se cierre,  y ya éste libera los recursos adecuadamente y se cierra evitando así el uso de kill -9 que a veces puede  dejar recursos hardware abiertos.

Las líneas a meterle al main del bgdi no son tantas ni complejas, son las que te puse antes, pero bueno, si no quiere añadirlas no pasa nada tu eres el que tiene la última palabra en este programa :D, simplemte era como sugerencia de mejora.
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 03:23:28 pm
por favor... bennu no tiene control de señales a nivel operativo, por ende no se cierran las cosas adecuadamente...

pero si asi lo deseas, no es para nada dificil hacer un modulo que cree un signal handler y haga lo que quieras en consecuencia, hazlo si asi quieres.
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:25:18 pm
¿?, no es bennu, es C.
Bueno, está visto que no te quieres bajar del caballo, no pasa nada, cierro el pico.
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 03:31:50 pm
¿?, no es bennu, es C.
Bueno, está visto que no te quieres bajar del caballo, no pasa nada, cierro el pico.

puf, a ver... intentare explicarlo de forma simple...

para liberar todas las cosas de forma limpia, necesitas poder cerrar/liberar todos los recursos utilizados, entonces, todos los recursos utilizados no son controlados por el core de bennugd, muchos se crean desde codigo prg o desde un modulo o alguna otra cosa desde prg y que no es controlado por bennugd, entonces SI BENNUGD NO TIENE CONTROL DE SIGNAL Y POR ENDE NO PUEDE DEFINIR SIGNALS HANDLERS PARA LIBERAR TODO AQUELLO QUE NO CONTROLA BENNUGD, ENTONCES NO TIENE SENTIDO LO QUE DICES COMO RAZON DE METER UN SIGNAL, ya que no se puede liberar todo limpiamente con solo meter un signal handler.

se entendio?
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 03:36:49 pm
por otro lado, tengo que decir que quien esta haciendo el manejo de la sigint es la libSDL, y aunque yo podria forzar manejarlo desde bgdi, quizas deberias pedir al equipo de SDL que elimine tal cuestion.
Título: Re: control de señal de parada para bgdi
Publicado por: FreeYourMind en Diciembre 11, 2010, 03:37:24 pm
¿?, no es bennu, es C.
Bueno, está visto que no te quieres bajar del caballo, no pasa nada, cierro el pico.

Siempre puedes intentarlo con esto

(http://www.muywindows.com/wp-content/uploads/2009/04/imperdible.jpg)

aunque Splinter tenga razón xD
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:42:46 pm
ok, tienes razón, no importa, yo simplemente era para poder cerrar programas y ejemplos mal programados, seguiré con mi "kill -9" :(.

http://stackoverflow.com/questions/675980/sdl-c-opengl-program-how-do-i-stop-sdl-from-catching-sigint
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 03:44:47 pm
DCelso, igual no te creas que a mi no me rompe las pelotas tambien el asunto, pero no me parece correcto meterle un control+c.
la idea es que nadie tenga que hacer kill, si el codigo esta bien programado, deberia tener opciones de salida directa, como puede ser un alt+x, o lo que sea, y no tener que darle kill, si tenemos que darle kill entonces es que todo esta jodido y en ese caso lo que menos importa es liberar recursos.
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 03:47:59 pm
ok, tienes razón, no importa, yo simplemente era para poder cerrar programas y ejemplos mal programados, seguiré con mi "kill -9" :(.

http://stackoverflow.com/questions/675980/sdl-c-opengl-program-how-do-i-stop-sdl-from-catching-sigint


si la signal_handler de SDL tira un SDL_QUIT a los eventos, entonces solo tienes que incluir el mod_wm en tu proyecto y ya te responderan los control+c
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:50:46 pm
umn, no jodas, testing.
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 03:54:33 pm
no va :(, habrá que hacer algo mas.
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 04:03:37 pm
a mi me parecia que no iba, pero asi decia el link que pasaste.
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 04:07:22 pm
si funcionara, deberia setear la exit_status, pero no lo hace...
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 04:09:37 pm
podria ponerle un sig_dfl, pero solo serviria para matar el programa, no para sallir de manera limpia.
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 04:17:53 pm
:D, a mi me vale, si es ahora lo que hago con kill -9 :D, pero me ahorraría tener que buscar su pid antes :D
Título: Re: control de señal de parada para bgdi
Publicado por: SplinterGU en Diciembre 11, 2010, 04:21:00 pm
ahora me toca a mi...

como no conoces el killall?

pones killall -9 bgdi, y ya ta.
Título: Re: control de señal de parada para bgdi
Publicado por: DCelso en Diciembre 11, 2010, 06:10:40 pm
ahí más dao, umn, pues es el que uso, lo que pasa es que no se me ocurrió ponerle el -9 a este, creía que no lo soportaba :'(