Autor Tema: PROCESS/FUNCTION duda  (Leído 170 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
PROCESS/FUNCTION duda
« en: Octubre 14, 2017, 09:45:59 am »
Hola a todos, como les va...., estos últimos días he vuelto a programar después de un largo tiempo y me ha venido una duda respecto al tema PROCESS/FUNCTION a ver si pueden ayudarme. Tengo entendido que al llamar a una function, la ejecuciòn de codigo no continua hasta que la function haya terminado.., bueno, la cuestión la planteo bien simple: desde un proceso principal (a) llamo a dos procesos (b y c), los procesos b y c invocan cada uno, una FUNCTION. La pregunta es, al ejecutarse el proceso b cuando fue llamado.., el proceso c se ejecutaría al terminar la function del proceso b o se ejecutarían los dos procesos (b y c) al mismo tiempo reproduciendo su respectiva function?


Por si eso fue mucha ensalada aqui pongo un poco de codigo:


Código: [Seleccionar]
PROCESS a()
BEGIN
b(); //antes de ejecutar el proceso c, tiene que termina la function de èste proceso?
c();
loop
frame;
END
END


PROCESS b()
BEGIN
prueba();
loop
frame;
end
end



PROCESS c()
BEGIN
prueba();
loop
frame;
end
end


FUNCTION prueba()
BEGIN
//bla bla bla codigo de la funcion
END


Ok, espero que se haya comprendido..., gracias de antemano y salu2...

Desconectado l1nk3rn3l

  • Hero Member
  • *****
  • Mensajes: 1964
  • Karma: 253
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #1 en: Octubre 14, 2017, 02:41:52 pm »

Puedes usar el modulo  mod_say para saber desde consola que esta pasando dentro...



Código: [Seleccionar]

import "mod_say"

PROCESS a()
BEGIN
say("se ejecuto process A ");
b(); //antes de ejecutar el proceso c, tiene que termina la function de èste proceso?
c();
prueba("A");
loop
frame;
END
END


PROCESS b()
BEGIN
say("se ejecuto process b ");
prueba("B");
loop
frame;
end
end



PROCESS c()
BEGIN
say("se ejecuto process c ");
prueba("C");
loop
frame;
end
end


FUNCTION prueba(string letra)
BEGIN
//bla bla bla codigo de la funcion
 say("se ejecuto funcion prueba desde "+letra);
END


begin
  a();
end



Se imprime en consola esto :

se ejecuto process A
se ejecuto process b
se ejecuto funcion prueba desde B
se ejecuto process c
se ejecuto funcion prueba desde C
se ejecuto funcion prueba desde A



Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #2 en: Octubre 14, 2017, 03:14:10 pm »
Buenas l1nk3rn3l, agradezco la respuesta, uhm.., entiendo lo que dices. Para ser mas preciso en lo que quiero saber..., supongamos que la function prueba que ejecuta el proceso b tiene un bucle infinito..., ¿el proceso c se ejecutaría igual y tambien su respectiva function?

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #3 en: Octubre 14, 2017, 06:31:18 pm »
a ver... si la funcion tiene frame pasa al siguiente proceso (sea cual sea este).
function solo detiene al proceso/funcion invocador, si no hay frame dentro de la funcion, esta detiene todo hasta que termine de ejecutarse.
si hay frame en la funcion, solo detiene al invocador y no a los demas.

igualmente siempre se ejecuta 1 proceso por vez, nunca se ejecutan mas de 1 por vez.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #4 en: Octubre 15, 2017, 07:23:59 am »
Hola, ahora si eso aclara mi duda, gracias.., aprovecho para preguntar otra cosa respecto a un proceso. Um, si yo tengo un proceso sin bucle., éste proceso ejecutaría su código interno y después se eliminaría solo, es así o hay que meterle un signal? lo mismo seria si tuviera un solo bucle y detengo ese bucle? se elimina el process..

Conectado panreyes

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 2042
  • Karma: 64
  • Sexo: Masculino
    • Ver Perfil
    • panreyes.com
Re:PROCESS/FUNCTION duda
« Respuesta #5 en: Octubre 15, 2017, 08:14:51 am »
Hola "Hola" xD
El proceso finaliza cuando llega al End, no hace falta utilizar signal para acabar con él.
Si no tiene un bucle, el código que esté dentro se ejecutará una sola vez por cada vez que lo instancies.

Ejemplos:
Si tenemos este código:
Código: [Seleccionar]
Process uno();
Begin
 graph=png_load("nave.png");
End

Se cargará el gráfico de la nave en este proceso e instantáneamente el proceso dejará de existir y no llegará a mostrar imagen alguna.

Si tenemos este otro código:
Código: [Seleccionar]
Process uno();
Begin
 graph=png_load("nave.png");
 frame;
End
Se cargará el gráfico de la nave, se mostrará el gráfico por pantalla durante un solo fotograma y finalizará el proceso.

Y si tenemos este otro:
Código: [Seleccionar]
Process uno();
Begin
 graph=png_load("nave.png");
 while(not key(_esc))
  frame;
 end
End
Se cargará el gráfico de la nave y, hasta que pulsemos la tecla ESC, se mostrará el gráfico en cada fotograma.

Espero haberte respondido y explicado un poco mejor cómo funciona.

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #6 en: Octubre 15, 2017, 09:19:34 am »
Gracias panreyes ahora entiendo..., solo me queda la última pregunta respecto al mismo tema de process. la pregunta es: un process sin frame, detiene todo (al igual que una function) hasta que termine de ejecutarse?
« última modificación: Octubre 15, 2017, 09:25:15 am por Hola »

Conectado panreyes

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 2042
  • Karma: 64
  • Sexo: Masculino
    • Ver Perfil
    • panreyes.com
Re:PROCESS/FUNCTION duda
« Respuesta #7 en: Octubre 15, 2017, 03:54:36 pm »
Gracias panreyes ahora entiendo..., solo me queda la última pregunta respecto al mismo tema de process. la pregunta es: un process sin frame, detiene todo (al igual que una function) hasta que termine de ejecutarse?
:)

El código de los PROCESS se ejecuta hasta que llega a un "frame".

Un ejemplo:
Código: [Seleccionar]
Begin
 uno();
 dos();
 while(!key(_esc))
  say(4);
  frame;
 end
End

Process uno();
Begin
 say(1);
 frame;
 say(3);
End

Process dos();
Begin
 say(2);
 frame;
End

Este sería su resultado:
Código: [Seleccionar]
1
2
4
3
4
4
4
4
4
...

BennuGD hará lo siguiente:
- Inicializa la instancia de uno(), escribe un 1 en consola y hace "frame"
- Inicializa la instancia de dos(), escribe un 2 en consola y hace "frame"
- El hilo principal (process main()) comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame"
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma (para diferenciarlo del frame del código) en pantalla.
- El gestor de instancias continua ejecutando el código de las instancias, según el orden de las locales "priority" e "id". (No te preocupes si no entiendes esto aún ;) )
- La instancia del proceso main() continua su ejecución desde su último "frame": comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame".
- La instancia del proceso uno() continua su ejecución desde su último "frame", escribe un 3 en la consola y hace "frame"
- La instancia del proceso dos() continua su ejecución desde su último "frame", alcanza el final (End) del proceso y se destruye su instancia.
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma en pantalla.
- La instancia del proceso main() continua su ejecución desde su último "frame": comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame".
- La instancia del proceso uno() continua su ejecución desde su último "frame", alcanza el final (End) del proceso y se destruye su instancia.
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma en pantalla.
- La instancia del proceso main() continua su ejecución desde su último "frame": comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame".
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma en pantalla.
- ...
(y así hasta que se pulse la tecla ESC)

El frame indica que la instancia está lista para mostrarse por pantalla, y cuando todas las instancias han llegado a un frame o han sido destruidas, es cuando se renderiza y se muestra el fotograma por pantalla. A su vez, el frame también devuelve el hilo de ejecución al proceso padre que lo acaba de instanciar (por eso el resultado es 1 (uno),2 (dos),4 (main),3(uno),4(main),4(main),4(main),4(main),4(main),etc...)

No se si te he ayudado con esta explicación o te he confundido más :)

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #8 en: Octubre 15, 2017, 04:54:31 pm »
Perfectamente panreyes, si, ya me ha quedado claro con esos ejemplos, gracias a todos.


Salu2!

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:PROCESS/FUNCTION duda
« Respuesta #9 en: Octubre 16, 2017, 12:12:05 am »
esto esta para ir a un FAQ...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2