Page 1 of 2

Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 6:08 pm
by shao
Hola, creo recordar que hace tiempo hice una sugerencia sobre esto, me refiero a procesos que no declaran locales ni ninguna variable que no declares tu, usados simplemente para calcular o realizar operaciones sin mostrar graficos.
Que pensais sobre esto?, se hara? no se hara?.

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 7:19 pm
by PAMERCO
pero para eso no estan las function??

o no lo he entendido bien

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 7:32 pm
by shao
Las funciones usan las locales predefinidas, a parte que detienen al proceso llamante, yo me refiero a procesos que ocupen únicamente la memoria de las variables que tú declares en ese proceso.

Sí tengo un proceso que tiene que estar controlando el evento donde se encuentra el personaje, ese proceso está ocupando la memoria de sus locales predefinidas aunque yo no vaya a usarlas.

Sí tienes varios procesos haciendo cálculos similares, pues estas ocupando una memoria que no es necesario ocupar.

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 7:55 pm
by erkosone
Hace tiempo Simulatorone propuso y yo también lo comente, que se puedan crear funciones en gemix.
Ahora mismo las funciones de gemix son como las de div, osea, que no son funciones, son un segundo tipo de proceso, lo que interesa es poder crear funciones de verdad, y threads, con eso lo tienes solucionado.

Aunque eso tiene lagunas, por que sin un sistema de eventos.. de poco valen las funciones, ya que habría que tenerlas funcionando en un thread con un delay por timer para que no colapsen la cpu.
Es un tema delicado, a gemix le hacen falta mas cosas para poder hacer esto Shao.

Una solución bastante elegante y eficiente es tener un único proceso que haga de controlador de todos los eventos del juego, o por lo menos de todos los de cada etapa/parte del juego.
Yo la única forma que he encontrado que funcione rápido es mediante un switch así:

Ten en cuenta que en el programa donde se use hace falta una variable LOCAL llamada estado, entonces lanzas el gameController así: ID_gameController = gameController();
Y para destruirlo así: ID_gameController.estado = -1;

Yo uso siempre códigos como este:
[Codebox=gemix file=Untitled.gemix]process gameController();
// depende de la variable Global gameStatus..
// el programa debe tener una variable LOCAL llamada 'INT estdado'..
begin
SIGNAL_SET_BEHAVIOUR(ID, s_freeze, s_behaviour_ignore);
SIGNAL_SET_BEHAVIOUR(ID, s_kill, s_behaviour_ignore);
SIGNAL_SET_BEHAVIOUR(ID, s_kill_tree, s_behaviour_ignore);
switch(gameStatus)
case onMenu:
//...
end
case onPlaying:
//...
end
case onConfig:
//...
end
case onGameCredits:
//...
end
case onPause:
//...
end
end
// gameController destructor..
if(estado = -1)
break;
end
frame;
end[/Codebox]

cada CASE tiene asignado una constante definida en la cabecera del programa, algo así:
[Codebox=gemix file=Untitled.gemix]const
onMenu = -1000;
onPlaying = -1001;
onConfig = -1002;
onGameCredits = -1003;
onPause = -1004;[/Codebox]

Así te despreocupas de recordar valores numéricos, solo usas los nombres en todo el programa, quizá te sirva la idea..

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 8:13 pm
by PAMERCO
creo que shao lo dice mas que nada por el tema de los recursos que consumen las variables locales predefinidas, las utilice o no, verdad??

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 8:51 pm
by shao
Sí, más que nada lo digo por eso, me pregunto por que tienen que ocupar esa memoria sí no se va a utilizar, que no es que sea mucha pero sería menos carga.

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 9:41 pm
by erkosone
Creeme, un proceso en memoria es mucho mas que unas cuantas variables.. las variables es el menor de los problemas, los procesos tienen ID, prioridad, variables como graph y file, ahora física, entran en las listas de objetos del core... un sinfin de cosas mas además de las variables, Simu pidió "y con mas razón que un santo" que existan las clásicas funciones como en cualquier lenguaje, eso es una solución a medias por lo de los threads que te comentaba en este lenguaje.. pero un nuevo tipo de proceso "a pelo" la verdad es que no estaría mal, osea, lo que tenemos es:
- PROCESS
- FUNCTION

Y lo que molaría mucho tener es:
- PROCESS2
- FUNCTION2

O algo así XD.. la verdad es que llevamos tiempo pidiendolo jeje.. Simu y yo nos unimos a la solicitud. :)
Ya somos 3, haber que dice CicTec.

Re: Procesos dedicados a calculo.

Posted: Fri Aug 23, 2013 9:57 pm
by CicTec
Hola shao,

Si bien sea interesante poder personalizar los procesos, es algo bastante mas complejo, porque habria que cambiar y tener en cuenta de muchas cosas en la implementacion interna tanto del core como de los modulos.

La solucion mas simple es una nueva opcion de compilacion que indique a los bloque FUNCTION de comportarse como funcion normales de otros lenguajes, de aqui sera imposible llamar FRAME (dara error de compilacion) pero es lo de menos, porque realmente llamar FRAME en FUNCTION tiene muy pocas utilidades respecto a la ventaja de ocupar menos memoria y ser mas rapida en la llamada/retorno.

Una solucion intermedia se habra con el nuevo update en cuanto saldran los metodos.

Sobre aplicar threads a cada proceso, olvidadlo, es una muy pero muy pesima idea.

Re: Procesos dedicados a calculo.

Posted: Sun Aug 25, 2013 12:40 pm
by shao
Entonces esas funciones que describes no pueden ser utilizadas como bucle durante una partida, por que si entiendo bien, gemix daria error al no llegar nunca esas funciones a frame.

Asi que si, serian funciones como en otros lenguajes pero no al no poder usar frame, solo serian para llamarlas, hacer cierto calculo y que estas mueran, es decir, no podrian mantenerse en bucle indefinidamente por que daria error.
Por lo tanto los procesos sin locales y solo para calculos (y con la posibilidad de hacer frame y mantenerse indefinidamente) no son posibles.

Bueno, habra que usar los procesos de toda la vida para estas cosas.

Re: Procesos dedicados a calculo.

Posted: Sun Aug 25, 2013 3:27 pm
by CicTec
Exacto, pero esto del FRAME es cosa de DIV, nigun lenguaje normal hace eso en las funciones cuya utilidad es propior entrar, ejecutar y salir.