dudas on_exit

Started by Trecek, August 04, 2011, 09:44:32 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Trecek

Cito del manual de Oscar: "Se recomienda usar la cláusula on_exit en una función/proceso, para liberar aquellos recursos reservados por ésta." (Pag.63)
No he encontrado nada mas en el manual, ni tampoco en la wiki. (Sera que no lo he sabido buscar?)
Disculparme si pregunto algo que ya se ha explicado en otro post, tambien he buscado por el foro, pero solo he encontrado un ejemplo en un post en el que hablaban de otra cosa, y no me sirve.

Hasta donde yo entiendo, cada proceso ejecutara las instrucciones que tenga entre el on_exit y el final del proceso justo antes de terminarse el proceso(idem para funciones).Me equivoco?

Mis dudas son:
-Cual es su sintaxis? necesita end, o solo con poner on_exit antes del end//begin ya vale? (con su codigo entre medias, claro)
-Segun el manual de Oscar esta instruccion es util para liberar recursos. unload fpg y demas (o como se ponga, ya lo mirare) la cuestion es: una vez el proceso muere, el espacio de memoria ocupado por sus variables privadas se libera? o seria conveniente liberarlo tambien? supongo que no hace falta, pero yo que se, dudas de novato. Aparte de fpgs que otras cosas se pueden "unlodear"? fnts? sonidos? joer, en esto estoy muy verde.

Agradecere infinitamente (o al menos hasta que se me olvide) cualquier explicacion acerca de on_exit y liberacion de recursos.

Trecek

Acabo de encontrar on_exit en la wiki, sorry, no debi de buscar bien  :-[

Aun asi tengo dudas acerca de que recursos conviene liberar al terminar un proceso, aparte de maps y fpgs (si los hay). Gracias por adelantado.

kim-elet-o

No, no te equivocas, solo añadir que si el proceso es "terminado" por otro proceso tambien se ejecutan las intrucciones que halla dentro de la clausula. La sintatica de On_Exit es la siguiente:

Process unProceso()
   Begin

   // codigo fuente del proceso.
   
   On_Exit

   // Codigo fuente de On_exit.

   End

Se liberan sus variables, pero no los recursos cargados en memoria, con lo cual si con un proceso cargas recursos, y te interesa liberarlos cuando acabe dicho proceso, este es el lugar ideal para hacerlo, fuente, sonidos, memoria dinamica, demas recursos que se carguen en memoria. Poco a poco, nadie nace enseñado, BennuGD es grande, pero como dijo Jack el destripador, "vayamos por partes".

Tambien es util aqui incluir codigo que haga acciones que se deban realizar siempre que se termine un proceso, por ejemplo imagina que tienes un proceso que sea un marcianito, y cuando este sea destruido se deba genera una explosion que podria ser tambien otro proceso, pues aqui es el sitio donde llamaras al proceso explosion, imaginacion al poder.
|/
|\im-elet-o el yayo programador.

Trecek

Lo de poner ahi codigo que se deba ejecutar siempre cuando termine el proceso lo sabia, de hecho para eso pretendo utilizarlo ;) lo que me preocupaba un poco era si al terminar los procesos se liberaba el espacio reservado a las variables, porque estoy metiendo unas peazo tablas enormes tipo base de datos, en fin, bueno es saber que no me tengo que preocupar por eso.

Asi que los recursos que debiera "unlodear" serian, fpgs, maps, fuentes y sonidos? alguno mas?

Gracias por la explicacion kim-elet-o, mas o menos me hacia una idea, pero me gusta ir sobre seguro si puedo :)

kim-elet-o

Tambien videos, mapas generados en tiempo de ejecucion, ahora no me acuerdo de mas cosas, pero piensa que todo lo que sean recursos externos que se carguen en memoria son candidatos a ser descargados.

|/
|\im-elet-o el yayo programador.

Trecek

Bueno, creo que me hago a una idea.

De momento no he necesitado ningun unload, ya que estoy haciendo las diferentes partes del programa por separado (una seccion=un programa) cuando las una todas en un solo programa ya me tocara cargar y descargar fpgs, sonidos y demas cuando pase de una seccion a otra, asi que claro, me interesaba saber mas o menos como va eso, gracias por las explicaciones :)

Karma

kim-elet-o

|/
|\im-elet-o el yayo programador.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Aunque se ha dicho, se ha pasado muy por encima: liberar la memoria ocupada por punteros. Es para lo que mejor viene on_exit y se suele olvidar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Quote from: Drumpi on August 04, 2011, 06:28:53 PM
Aunque se ha dicho, se ha pasado muy por encima: liberar la memoria ocupada por punteros. Es para lo que mejor viene on_exit y se suele olvidar.

ya lo habia dicho kim.

Quote from: kim-elet-o on August 04, 2011, 10:16:44 AM
No, no te equivocas, solo añadir que si el proceso es "terminado" por otro proceso tambien se ejecutan las intrucciones que halla dentro de la clausula. La sintatica de On_Exit es la siguiente:

Process unProceso()
   Begin

   // codigo fuente del proceso.
   
   On_Exit

   // Codigo fuente de On_exit.

   End

Se liberan sus variables, pero no los recursos cargados en memoria, con lo cual si con un proceso cargas recursos, y te interesa liberarlos cuando acabe dicho proceso, este es el lugar ideal para hacerlo, fuente, sonidos, memoria dinamica, demas recursos que se carguen en memoria. Poco a poco, nadie nace enseñado, BennuGD es grande, pero como dijo Jack el destripador, "vayamos por partes".

Tambien es util aqui incluir codigo que haga acciones que se deban realizar siempre que se termine un proceso, por ejemplo imagina que tienes un proceso que sea un marcianito, y cuando este sea destruido se deba genera una explosion que podria ser tambien otro proceso, pues aqui es el sitio donde llamaras al proceso explosion, imaginacion al poder.

despues soy yo el que no leo... :D
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quote from: Drumpi on August 04, 2011, 06:28:53 PM
Aunque se ha dicho, se ha pasado muy por encima: liberar la memoria ocupada por punteros. Es para lo que mejor viene on_exit y se suele olvidar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Trecek

Jajajajajaa, haya paz chicos.

De momento no estoy usando punteros, pero tomo nota, gracias :)

Asi pues... fpgs, fnts, sonidos, videos, punteros, maps... me dejo algo?

Drumpi

Procesos hijos.
En general, cualquier comando que use LOAD_* o NEW_* (o se invoque a cualquier proceso que se quede en memoria) necesita ser descargado, ya sea en on_exit o en el propio código.

Eso sí, los verdaderos hombres no usan on_exit (y programan en PaintBrush).
Nah, es broma, pero si eres capaz de no usarlo, no tendrás ningún problema en el resto de lenguajes, pero es más un reto personal que una recomendación: en un sistema basado en procesos como es Bennu, on_exit es hasta necesario.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

KeoH

otra funcion q es una maravilla y q debe estar en el On_exit es:   signal(id, s_kill_tree);

xDDD me encanta :)

SplinterGU

Quote from: KeoH on August 06, 2011, 01:38:01 AM
otra funcion q es una maravilla y q debe estar en el On_exit es:   signal(id, s_kill_tree);

xDDD me encanta :)

no siempre... ;)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2