get_id(<tipo de proceso>)
Retorna:
El código identificador de un proceso o 0.
Descripción:
Comprueba si hay procesos del tipo especificado activos. En caso afirmativo, esta función devolverá el código identificador de uno de ellos y, en el caso contrario, devolverá un 0.
Si existen varios procesos del tipo que se ha especificado, la función get_id() devolverá el resto de los identificadores en las sucesivas llamadas que se realicen a la misma.
Una vez se hayan devuelto todos los códigos identificadores, la función devolverá 0, hasta que se vuelva a ejecutar una sentencia FRAME, momento a partir del cual esta función devolverá, de nuevo, todos los códigos identificadores de los procesos del tipo indicado.
Para obtener de esta forma todos los códigos identificadores de los procesos no se debe utilizar la sentencia FRAME entre dos llamadas consecutivas a la sentencia get_id(). En el caso de ejecutar una sentencia FRAME, esta función volverá a retornar todos los códigos identificadores de procesos desde el primero.
Algo similar sucede si se ejecuta una llamada a la función especificando un tipo de proceso diferente; si tras esto se vuelven a pedir identificadores del tipo de proceso anterior, esta función también los volverá a retornar todos desde el primero.
PROGRAM ejemplo_get_id; PRIVATE identificador_proceso; contador; BEGIN load_fpg("help\help.fpg"); put_screen(0, 1); FROM contador=1 TO 20; proceso_móvil(rand(0, 319), rand(0, 199), 101); END LOOP FROM contador=1 TO 20; // Cogemos los identificadores de los procesos identificador_proceso = get_id(TYPE proceso_móvil); identificador_proceso.angle+=rand(-5000, 5000); END FRAME; END END PROCESS proceso_móvil(x, y, graph); BEGIN LOOP FRAME; END END
En el ejemplo, después de cargar el fichero de gráficos y poner la pantalla de fondo, se crean 20 procesos tipo proceso_móvil con sus posiciones elegidas aleatoriamente y un triángulo como su gráfico.
Estos procesos únicamente ejecutarán sentencias FRAME dentro de un bucle, para visualizarse.
Desde el programa principal se van cogiendo los identificadores de los procesos tipo proceso_móvil con la función get_id() (guardándolos en la variable identificador_proceso) y utilizándolos para modificarles el ángulo (su variable local angle).
Al disponer del código identificador de un proceso se pueden consultar o modificar sus variables locales (como angle en este ejemplo) o bien enviar señales al proceso con la función signal().
La función collision() sirve para obtener los códigos identificadores de procesos de un tipo determinado que, además, colisionen (choquen) con el proceso actual.