Todos los procesos tienen su propio código identificador en this (palabra reservada en el lenguaje que equivale al código identificador del proceso).
Cuando se crea un proceso (se llama), éste devuelve como valor de retorno su propio código identificador.
En el siguiente ejemplo, desde el programa principal se crea un proceso (de tipo mi_proceso) y se guarda su identificador en la variable id2.
PROCESS( mi_proceso )
BEGIN
// ...
END
MAIN_PROGRAM_CDIV
PRIVATE int id2;
BEGIN_PROGRAM
id2=mi_proceso();
// ...
END_PROGRAMTodos los procesos tienen predefinidas las siguientes variables locales con identificadores de otros procesos:
father - padre, identificador del proceso que lo creó (el que hizo la llamada).
son - hijo, identificador del último proceso creado por éste (último proceso al que se ha llamado).
bigbro - Hermano mayor, identificador del último proceso que creó el padre antes de crear éste.
smallbro - Hermano menor, identificador del siguiente proceso que creó el padre tras crear éste.
Estas variables pueden valer 0 si no han sido definidas (por ejemplo son valdrá 0 hasta que no se cree un proceso, o si éste ya ha desaparecido).
Los códigos identificadores de los procesos permiten acceder a las variables locales del mismo (identificador.variable), y como father, son, etc., son, a su vez, variables locales se pueden realizar combinaciones como son->bigbro para acceder al identificador del penúltimo proceso creado (ya que son es el del último, por lo que su hermano mayor será el penúltimo).
Hay otras formas de obtener códigos identificadores de procesos (además de cuando se crean y por parentesco directo), como son:
- La función get_id() para obtener los identificadores de los procesos de un tipo determinado (nave, disparo, etc.) que existen en un determinado momento del juego.
- La función collision() para obtener los identificadores de los procesos con los se está chocando (colisionando).
Cuando un proceso determinado necesita acceder desde muchos otros, por ser un proceso importante como, por ejemplo, la nave protagonista de un juego, entonces puede ser más útil asignar su identificador a una variable global del programa (que puede ser accedida por cualquier proceso en cualquier punto).De esta forma cualquier proceso podrá interactuar con él, ya que tendrá su identificador.
//Variables globales
int id_nave; PROCESS( nave ) BEGIN // ... END PROCESS( enemigo ) BEGIN // ... id_nave->z=0; // ... END MAIN_PROGRAM_CDIV BEGIN_PROGRAM id_nave=nave(); // ... END_PROGRAMEn este ejemplo los procesos de tipo enemigo acceden en un determinado punto a la variable z de la nave que creó el programa principal, utilizando para ello su identificador que está en la variable global id_nave.