Idea tonta con los signals

Started by Drumpi, April 06, 2009, 06:52:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Como sugerir es gratis y mi cabeza es más olvidadiza que la de un pez, suelto la idea y luego se sopesa.

Creo que no sería difícil añadir una variable local a todos los procesos que almacenen el estado anterior (sleep, freeze, waiting...), de tal forma que al mandarles una señal especial, "signal(id,s_previous)" quizás, vuelvan a su estado anterior
¿Utilidad? congelamos un arbol entero como motivo de una pausa, a la hora de salir de una pausa, se le manda esta señal al arbol y se recupera el estado anterior.
¿Que pasa si se le manda dos veces seguidas la misma señal? nada, porque si le mandamos la primera vez la señal, el estado actual pasa a ser el anterior y viceversa.

Luego no se si esto se podría simular con las funciones: que un proceso permanezca varios frames esperando una señal/dato desde otro proceso.

Un par de tonterías, pero bueno, algun novato lo agradecerá.
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

No es dificil, pero el problema esta en que eso no es logico, es practico a alguna utilidad especifica, pero no es logico...
lo logico seria tener un signal handler, y ante una señal poder ejecutar un codigo especifico... eso es correcto y logico...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Bueno, la primera parte puede que sea ilógico, y obviamente se puede hacer por soft mediante locals, sons y signals, pero como pensé que es algo que se pregunta con bastante frecuencia y que, al fin y al cabo, son los novatos a los que se dirige el lenguaje (y que muchas cosas son inventadas, reconozcámoslo, DIV era una revolución respecto al resto de lenguajes), pues que sería una buena sugerencia, como lo del ON EXIT.

Lo segundo es que no recuerdo si las function permitía finalmente el uso de frame en su código o no, pero como es un método de control que se usa en la programación de sistemas multicore (que son los que usan programación basadas en procesos, concurrencia, señales, etc etc) pues quizás fuera útil en algunos casos.

Ya, lo de ser util o no en cosas específicas depende de la imaginación que le eche uno. Si la pausa te parece algo muy específico, cuando es algo que se usa en el 99% de los juegos...
Pero lo dicho, sólo es una de mis ideas nocturnas, y se puede hacer por código, no te veas obligado ni a considerarlo siquiera :D :D :D
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

si, a nivel codigo prg seria logico, pero no a nivel lenguaje.

con respecto a un "ON SIGNAL blah blah", es lo que digo, eso si es logico, y lo tengo en plan.

las funciones si permiten FRAME, pero el proceso llamador no continua hasta que la funcion retorne (termine retornando un valor)

Son util, claro que si, pero no son logicas a nivel lenguaje, tampoco creo como librerias base, pero... podrian ir en un modulo especifo a utilidades de juegos, dicho modulo podria agregar una local, y tener una nueva signal, la cual seria parecida a la signal base pero que se encargue de mantener las 2 variables.

Seria un modulo muy util.

Bueno, podria ser un modulo especial, game_tools o misc o pause o algo asi.

La cosa es que pienso en bennu como un lenguaje generico, pero tampoco tengo que olvidar que actualmente es un lenguaje orientado a juegos, y por ende funciones de ese estilo vienen bien... la cosa es donde ponerlas.

Podria ser, insistis 2 o 3 veces mas y me convences del todo. :D
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Nah, ya digo que a mi personalmente me da igual, pero ayer lei en este mismo foro el décimo mensaje desde que programo en Fenix preguntando ¿cómo se puede hacer una pausa? y se me ocurrió esta solución ;D
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)

Windgate

¡Aquí llega Windgate, el desenterrador de posts!

En su día un amigo me propuso la idea de poder enviar una señal de FREEZE "acumulativa". Esto es, si te llega una te congelas y guardas un 1, si te llega otra sigues congelado y guardas un 2, si te llega otra sigues congelado y guardas un 3.

¿Para qué serviría semejante mostruosidad?

Para hacer menús desplegables con varios niveles de submenú, me explico:

Al acceder a un submenú se manda una señal FREEZE "acumulativa" al menú padre, así evitas que atienda a pulsaciones de teclas que quieres que afecten al submenú.

Luego, a medida que cierras menús vas descongelanzo (UNFREEZE) de forma "acumulativa" los anteriores, cuando guardan un 0 ya están descongelados, lo haces hasta volver al inicial.

UN DETALLE: No hablo de menús en plan pestaña de ventana, me refiero a menús de videojuego RPG, en los que un menú puede abrirse sobre otro, por ejemplo a pantalla completa hasta varios niveles y sólo te interesa tener "activo" el último. (Menú -> Inventario -> Bolsa1 -> Item1)

Es una simple idea, mi amigo en su día hizo algo similar con un vector en el que almacenaba IDs de cada proceso menú y "nivel" de congelación de cada uno, lo que pasa es que no lo terminó, pero le sugerí la idea de las señales :'(

En cuanto a la idea de ON SIGNAL XXX Splinter es algo que me gustaría y mucho, para facilitar la comunicación de procesos, mientras se incluye si se incluye usaremos PUBLIC sabiamente xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es