Registrar Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos
Zona Arcade Zona de Descargas Puntuaciones C/V Ranking Xbox Live Blogs Emisoras radio y TV GP32Spain

* (Español) Segundo concurso programación GP2X Wiz GP32spain
* (English) Second GP2X Wiz GP32Spain coding contest
* (Français) 2ème concours de programmation GP32Spain Wiz
* (German) Zweiten GP2X WIZ Programmier-Wettbewerb
* (Português) Segundo concurso de programação GP32Spain GP2X Wiz
* (Italiano) Secondo Concorso di Programmazione GP2X Wiz GP32Spain
* (Korean)

Regresar   ZonaDeVicio - Tu comunidad de videojuegos online > Wiz/Caanoo > [Wiz/Caanoo] Soporte Fenix/BennuGD

Avisos

Respuesta
 
Herramientas Calificar Tema Desplegado
  #1  
Viejo 20/11/2009, 22:05
Avatar de Aiken
Aiken Aiken está online en estos momentos
Usuario Registrado
Mi colección: Consolas: 8, Portátiles: 24, Ordenadores: 1, Accesorios: 19, Otros: 2
 
Fecha de Ingreso: Aug 2003
Localización: Madrid (Getafe)
Mensajes: 9,097
Mi estado:
Entradas del Blog: 2
Suicidio de un proceso y ONEXIT

Hola chicos,

Tengo una duda, es mejor que un proceso se suicide o que sea el padre el que se encargue de matarle?

lo del suicidio, en el manual de fenix en los ejemplos lo suele hacer haciendo un "return" en cualquier punto del codigo que quieras que se suicide.

Pero haciendo un "return" ejecutara lo que hay en el ONEXIT?

O si en lugar de un return, dejamos que se salga de su bucle principal, morira no? pero ejecutara el codigo del ONEXIT?


Por si afecta, estoy hablando de fenix 092a.
Aiken
Responder Con Cita
  #2  
Viejo 21/11/2009, 04:23
Avatar de SplinterGU
SplinterGU SplinterGU está offline
Usuario Registrado
Mi colección: Consolas: 3, Portátiles: 2, Ordenadores: 2, Accesorios: 3, Otros: 1
 
Fecha de Ingreso: Jul 2009
Mensajes: 1,752
siempre que muere un proceso que tiene onexit, sea como sea que muere/finaliza, se ejecuta el onexit... lo hice yo...
Responder Con Cita
  #3  
Viejo 21/11/2009, 12:11
Avatar de Aiken
Aiken Aiken está online en estos momentos
Usuario Registrado
Mi colección: Consolas: 8, Portátiles: 24, Ordenadores: 1, Accesorios: 19, Otros: 2
 
Fecha de Ingreso: Aug 2003
Localización: Madrid (Getafe)
Mensajes: 9,097
Mi estado:
Entradas del Blog: 2
Cita:
Originalmente Escrito por SplinterGU Ver Mensaje
siempre que muere un proceso que tiene onexit, sea como sea que muere/finaliza, se ejecuta el onexit... lo hice yo...

Código:
proceso pepito()
private int cuenta; end
begin
graph=1; cuenta=0;

loop
  cuenta++;
  if (cuenta>10) return; end
  frame;
end


onexit:
unload_map();

end
es decir que poniendo algo asi, el unload_map se ejecutaria cuando cuenta>10 no?

en Bennu tambien?

Aiken
Responder Con Cita
  #4  
Viejo 21/11/2009, 12:42
Avatar de Segata Sanshiro
Segata Sanshiro Segata Sanshiro está online en estos momentos
Sega Shinja
Mi colección: Consolas: 2, Portátiles: 4, Accesorios: 7
 
Fecha de Ingreso: Feb 2004
Localización: Madrid
Mensajes: 6,017
No sabía que un proceso podía usar return ¿Se puede hacer también una llamada del estilo resultado = mi_proceso(); ? ¿El proceso que llama se paraliza hasta que el otro llega al return, igual que si hubiera llamado a una función?

Yo siempre usaba signal(id,s_kill);
__________________
Responder Con Cita
  #5  
Viejo 21/11/2009, 13:17
Avatar de Aiken
Aiken Aiken está online en estos momentos
Usuario Registrado
Mi colección: Consolas: 8, Portátiles: 24, Ordenadores: 1, Accesorios: 19, Otros: 2
 
Fecha de Ingreso: Aug 2003
Localización: Madrid (Getafe)
Mensajes: 9,097
Mi estado:
Entradas del Blog: 2
Cita:
Originalmente Escrito por Segata Sanshiro Ver Mensaje
No sabía que un proceso podía usar return ¿Se puede hacer también una llamada del estilo resultado = mi_proceso(); ?

si haces eso, te creara un nuevo proceso de tipo mi_proceso y te devolvera su id en la variable.

el return lo usan como break por asi decirlo.

Aiken
Responder Con Cita
  #6  
Viejo 21/11/2009, 13:25
Avatar de Segata Sanshiro
Segata Sanshiro Segata Sanshiro está online en estos momentos
Sega Shinja
Mi colección: Consolas: 2, Portátiles: 4, Accesorios: 7
 
Fecha de Ingreso: Feb 2004
Localización: Madrid
Mensajes: 6,017
Cita:
Originalmente Escrito por Aiken Ver Mensaje
si haces eso, te creara un nuevo proceso de tipo mi_proceso y te devolvera su id en la variable.

el return lo usan como break por asi decirlo.

Aiken
Tienes toda la razón del mundo, me estoy releyendo y no comprendo cómo he preguntado esa tontería tan gorda (que además he usado miles de veces) xD
__________________
Responder Con Cita
  #7  
Viejo 21/11/2009, 13:37
Avatar de GameMaster
GameMaster GameMaster está online en estos momentos
Your Game is Over!!!
Mi colección: Consolas: 52, Portátiles: 27, Ordenadores: 4, Accesorios: 69, Otros: 2
 
Fecha de Ingreso: May 2008
Localización: A tu lado, en tus sueños
Mensajes: 4,037
Mi estado:
Entradas del Blog: 3
Lo único que puedo aportar es que en DIV2 tenia un proceso que creaba un hijo, y al matar el padre el hijo moria automaticamente, en Bennu no moria el hijo, he tenido antes de matar el padre, matar el hijo
__________________
Responder Con Cita
  #8  
Viejo 21/11/2009, 13:58
Avatar de Drumpi
Drumpi Drumpi está offline
Sus cargareis la pantalla
Mi colección: Consolas: 3, Portátiles: 3, Ordenadores: 1, Accesorios: 7
 
Fecha de Ingreso: Sep 2005
Mensajes: 4,587
Mi estado:
Cita:
Originalmente Escrito por GameMaster Ver Mensaje
Lo único que puedo aportar es que en DIV2 tenia un proceso que creaba un hijo, y al matar el padre el hijo moria automaticamente, en Bennu no moria el hijo, he tenido antes de matar el padre, matar el hijo
¿EEEHH? ¿Mande? eso es un fallo de programación, si un padre moría en DIV el hijo quedaba huéfano y se convertía en hijo del proceso main.

La pregunta importante es, si muere el padre y el proceso main ¿quien adopta a los procesos huérfanos?
__________________

PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Responder Con Cita
  #9  
Viejo 21/11/2009, 14:11
Avatar de GameMaster
GameMaster GameMaster está online en estos momentos
Your Game is Over!!!
Mi colección: Consolas: 52, Portátiles: 27, Ordenadores: 4, Accesorios: 69, Otros: 2
 
Fecha de Ingreso: May 2008
Localización: A tu lado, en tus sueños
Mensajes: 4,037
Mi estado:
Entradas del Blog: 3
Es más, en Bennu sino mataba el hijo el programa hacia crash, era el motivo por el cual al matar un enemigo que lanza una hacha y esta estaba en pantalla el juego petaba...
__________________
Responder Con Cita
  #10  
Viejo 21/11/2009, 14:20
Avatar de Drumpi
Drumpi Drumpi está offline
Sus cargareis la pantalla
Mi colección: Consolas: 3, Portátiles: 3, Ordenadores: 1, Accesorios: 7
 
Fecha de Ingreso: Sep 2005
Mensajes: 4,587
Mi estado:
Eso es que el hijo leía alguna variable del difunto padre, seguro ¿has mirado el mensaje de error? seguro que es algo del estilo "no se encuentra el proceso (xxxx)".
__________________

PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Responder Con Cita
  #11  
Viejo 21/11/2009, 14:26
Avatar de GameMaster
GameMaster GameMaster está online en estos momentos
Your Game is Over!!!
Mi colección: Consolas: 52, Portátiles: 27, Ordenadores: 4, Accesorios: 69, Otros: 2
 
Fecha de Ingreso: May 2008
Localización: A tu lado, en tus sueños
Mensajes: 4,037
Mi estado:
Entradas del Blog: 3
si, porque la hacha volvia al enemigo y pasado algun tiempo la vuelve a lanzar
No lo miré porque ejecuto con un bat y la pantalla no se queda en pantalla al salir, pero tampoco importa eso lleva ya tiempo solucionado
Ha sido sólo a titulo de nota
__________________
Responder Con Cita
  #12  
Viejo 22/11/2009, 02:04
Avatar de SplinterGU
SplinterGU SplinterGU está offline
Usuario Registrado
Mi colección: Consolas: 3, Portátiles: 2, Ordenadores: 2, Accesorios: 3, Otros: 1
 
Fecha de Ingreso: Jul 2009
Mensajes: 1,752
Cita:
Originalmente Escrito por Aiken Ver Mensaje
Código:
proceso pepito()
private int cuenta; end
begin
graph=1; cuenta=0;

loop
  cuenta++;
  if (cuenta>10) return; end
  frame;
end


onexit:
unload_map();

end
es decir que poniendo algo asi, el unload_map se ejecutaria cuando cuenta>10 no?

en Bennu tambien?

Aiken
correcto!

Cita:
Originalmente Escrito por Segata Sanshiro Ver Mensaje
No sabía que un proceso podía usar return ¿Se puede hacer también una llamada del estilo resultado = mi_proceso(); ? ¿El proceso que llama se paraliza hasta que el otro llega al return, igual que si hubiera llamado a una función?

Yo siempre usaba signal(id,s_kill);
correcto! Si un proceso tiene return con valor, este proceso pasa a ser una funcion, si tiene FRAME en medio, el padre no es despertado por este FRAME, sino que espera al return toma el valor y luego sigue.
No has preguntado ninguna estupides, es una pregunta perfecta.


Cita:
Originalmente Escrito por Aiken Ver Mensaje
si haces eso, te creara un nuevo proceso de tipo mi_proceso y te devolvera su id en la variable.

el return lo usan como break por asi decirlo.

Aiken
No es del todo cierto, solo devuelve el ID al momento de FRAME si el proceso no retorna valor.

Cita:
Originalmente Escrito por GameMaster Ver Mensaje
Es más, en Bennu sino mataba el hijo el programa hacia crash, era el motivo por el cual al matar un enemigo que lanza una hacha y esta estaba en pantalla el juego petaba...
Eso no deberia ser correcto, DIV tenia procesos padres.... ahhhhh, ya veo, ahora me doy cuenta mientras escribo.... seguro que div tenia algun chequeo que si se intentaba usar una variable de otro proceso muerto, el proceso que intentaba hacerlo moria...
Responder Con Cita
  #13  
Viejo 22/11/2009, 04:56
Avatar de Drumpi
Drumpi Drumpi está offline
Sus cargareis la pantalla
Mi colección: Consolas: 3, Portátiles: 3, Ordenadores: 1, Accesorios: 7
 
Fecha de Ingreso: Sep 2005
Mensajes: 4,587
Mi estado:
Cita:
Originalmente Escrito por SplinterGU Ver Mensaje
Eso no deberia ser correcto, DIV tenia procesos padres.... ahhhhh, ya veo, ahora me doy cuenta mientras escribo.... seguro que div tenia algun chequeo que si se intentaba usar una variable de otro proceso muerto, el proceso que intentaba hacerlo moria...
Que yo recuerde (y de esto hace ya seis años) el programa se cerraba si accedías a una variable local de un proceso muerto en un 80% de las veces, anda que no tardé en solucionar dos problemas de esos.
Al menos a partir de Fenix ya lo indicaba con un error.

Por cierto, aun falta por responder a mi tontería: si a un proceso se le muere el padre, y muere el proceso main ¿queda totalmente huérfano o pasa a depender de otro porceso?
__________________

PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Responder Con Cita
  #14  
Viejo 22/11/2009, 09:38
Avatar de GameMaster
GameMaster GameMaster está online en estos momentos
Your Game is Over!!!
Mi colección: Consolas: 52, Portátiles: 27, Ordenadores: 4, Accesorios: 69, Otros: 2
 
Fecha de Ingreso: May 2008
Localización: A tu lado, en tus sueños
Mensajes: 4,037
Mi estado:
Entradas del Blog: 3
Te cuento a lo que mi entender ocurre:

Al morir el padre, las señales que el hijo lea o le envie al padre que ya no existe, son tratadas y no devuelven error, por eso DIV no peta, caso similar a mi parecer es el tema de que te hable antes sobre hacer unload de un sonido inexistente, en DIV tampoco devuelve error, y seguramente existan más cosas en que ocurre la misma diferencia, o sea, en que div esto se trata de una forma en que el programador ni se entera que tendria un error ahí por ese motivo de inexistencias

Ahora ya depende de ti lo que se tiene que tratar como error o no, en mi opinion como Bennu es más explicito y detalla más las distintas formas de actuar, esto deberia quedar tal cual lo tienes actualmente, porque si por ejemplo esto te parece que se tenga que tratar como en DIV lo de los sonidos seria igual y muchas más cosas...


Esto esta en el hijo, y son las condiciones que matan al hijo, y al contrario de lo que supone Splinter (y yo en el primer mensaje ), en DIV, al morrir el padre el hijo no muere, sencillamente ignora las señales del padre, y en este caso sólo va morir cuando se ejecute el ultimo IF, o sea, cuando salga de la pantalla (mapa).

IF (father.flags == 0)
IF (x < father.x)
father.estado = 0;
BREAK;
END
ELSE
IF (x > father.x)
father.estado = 0;
BREAK;
END
END
IF (x > 5100 OR x < -100)
BREAK;
END
< - >
2 - He estado haciendo pruebas, yo estaba matando el hijo antes de morrir el padre para solucionarlo en Bennu, pero lo ideal es que quedará como en DIV, o sea. si mato el padre, la hacha que lanza sigue en pantalla y sólo va desaparecer cuando salga de pantalla (como en la realidad si el enemigo fuera real ).

He estado buscando y los foros de Bennu, y me entero que seria posible, si antes de aceder a las propriedades del padre comprobamos que este sigue activo, o sea, con:

existe_padre = exists(inimigo3(x, y));

comprueba que el padre existe

o con

existe_padre = get_id(inimigo3(x, y));

devuelve 0 si el padre no existe

y despues si esta flag es verdadera acedemos al padre, si no lo es no lo hariamos.

El problema es que cuando pongo una o otra me crea un padre nuevo!!!!
O sea, cada vez que se ejecuta esto en el hijo este me crea un padre más...

Esto es un Bug o es que estoy haciendo mal la llamada de exists o get_id ??
__________________

Última edición por GameMaster fecha: 22/11/2009 a las 09:39. Razón: Edición automática anti doble-post.
Responder Con Cita
  #15  
Viejo 22/11/2009, 17:47
Avatar de Drumpi
Drumpi Drumpi está offline
Sus cargareis la pantalla
Mi colección: Consolas: 3, Portátiles: 3, Ordenadores: 1, Accesorios: 7
 
Fecha de Ingreso: Sep 2005
Mensajes: 4,587
Mi estado:
Es que al hacer:
existe_padre = exists(inimigo3(x, y));
Estás creando un nuevo proceso.
Debes hacer el exists con la ID del proceso que quieres comprobar. Creo que en tu caso es father (supongo que sabes lo que es).

Respecto a cómo actuaba DIV respecto a acceder a variables de procesos muertos, no se si es que me ignoras o te expresas fatal, porque creí haber dicho que DIV se cerraba sin decir nada.
Y si matas a un proceso, sus hijos no tienen por qué morir, a menos que hagas un s_kill_tree, los hijos siguen activos y se convierten en hijos del proceso main. Lo que ya no se es si esos procesos hijo toman la ID del main en sus variables locales father, que creo que no.
__________________

PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%
Responder Con Cita
Respuesta

Herramientas
Desplegado Califica este Tema
Califica este Tema:

Reglas de Mensajes
No puedes postear nuevos temas
No puedes responder a temas
No puedes postear adjuntos
No puedes editar tus mensajes

BB code está On
Las smilies están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios: GMT +2. La hora en este momento es 20:30.

Powered by vBulletin® Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.





(C) Anarchy 2000-2008