control de señal de parada para bgdi

Started by DCelso, December 11, 2010, 11:37:47 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

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.

#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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Quote from: SplinterGU on December 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.

Sin embargo, muchos juegos de los 80-90 (como el prince of persia) se cerraban con el ctrl+Q
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk

Quote from: yawin on December 11, 2010, 01:59:50 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...

panreyes

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

DCelso

Quote from: SplinterGU on December 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.
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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

panreyes

Quote from: DjSonyk on December 11, 2010, 02:39:22 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 :)

DCelso

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

y para recuperarlo pones fg (o bg si lo quieres mandar a background)
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

no todos los programas permiten control+c desde consola, lo siento...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

#10
: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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

#11
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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

¿?, no es bennu, es C.
Bueno, está visto que no te quieres bajar del caballo, no pasa nada, cierro el pico.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

#13
Quote from: DCelso on December 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.

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?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2