User Tag List

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 25

Tema: Suicidio de un proceso y ONEXIT

  1. #1

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de 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

  2. #2

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,737
    Mencionado
    64 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    937
    Agradecer Thanks Received 
    571
    Thanked in
    Agradecido 345 veces en [ARG:2 UNDEFINED] posts
    siempre que muere un proceso que tiene onexit, sea como sea que muere/finaliza, se ejecuta el onexit... lo hice yo...

  3. #3

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    Cita Iniciado 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

  4. #4

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    8,514
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    191
    Agradecer Thanks Received 
    299
    Thanked in
    Agradecido 177 veces en [ARG:2 UNDEFINED] posts
    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);

  5. #5

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    Cita Iniciado 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

  6. #6

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    8,514
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    191
    Agradecer Thanks Received 
    299
    Thanked in
    Agradecido 177 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado 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

  7. #7

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,309
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    552
    Thanked in
    Agradecido 424 veces en [ARG:2 UNDEFINED] posts
    Entradas de 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

  8. #8

    Fecha de ingreso
    Sep 2005
    Mensajes
    15,150
    Mencionado
    248 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    663
    Agradecer Thanks Received 
    1,838
    Thanked in
    Agradecido 1,258 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado 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%

  9. #9

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,309
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    552
    Thanked in
    Agradecido 424 veces en [ARG:2 UNDEFINED] posts
    Entradas de 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...

  10. #10

    Fecha de ingreso
    Sep 2005
    Mensajes
    15,150
    Mencionado
    248 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    663
    Agradecer Thanks Received 
    1,838
    Thanked in
    Agradecido 1,258 veces en [ARG:2 UNDEFINED] posts
    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%

  11. #11

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,309
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    552
    Thanked in
    Agradecido 424 veces en [ARG:2 UNDEFINED] posts
    Entradas de 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

  12. #12

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,737
    Mencionado
    64 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    937
    Agradecer Thanks Received 
    571
    Thanked in
    Agradecido 345 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado 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 Iniciado 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 Iniciado 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 Iniciado 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...

  13. #13

    Fecha de ingreso
    Sep 2005
    Mensajes
    15,150
    Mencionado
    248 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    663
    Agradecer Thanks Received 
    1,838
    Thanked in
    Agradecido 1,258 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado 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%

  14. #14

    Fecha de ingreso
    May 2008
    Ubicación
    A tu lado, en tus sueños
    Mensajes
    22,309
    Mencionado
    145 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    319
    Agradecer Thanks Received 
    552
    Thanked in
    Agradecido 424 veces en [ARG:2 UNDEFINED] posts
    Entradas de 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; 22/11/2009 a las 09:39 Razón: Edición automática anti doble-post.

  15. #15

    Fecha de ingreso
    Sep 2005
    Mensajes
    15,150
    Mencionado
    248 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    663
    Agradecer Thanks Received 
    1,838
    Thanked in
    Agradecido 1,258 veces en [ARG:2 UNDEFINED] posts
    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%

Página 1 de 2 12 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •