procedimiento IniSemaforos(

FicheroSemaforos: cadena;

CampoSemaforo: cadena;

CampoIdentificador: cadena;

FichEsGeneral: booleano;

TiempoEspera: entero;

TiempoReintento: entero);

 

Determina la configuración del fichero de semáforos para el posterior uso del procedimiento CambiaSemaforo.


 

Los semáforos configurados mediante este procedimiento y que se utilizan mediante el procedimiento CambiaSemaforo aportan un método para asegurarse de que una determinada operación no podrá realizarse nunca a la vez desde dos o más puestos distintos.

 

Para usar los semáforos debe crearse un fichero exclusivamente para ellos, que puede ser tanto de proyecto como general y que debe estar formado por dos campos, uno de tipo cadena de longitud 30 o superior (para el código del semáforo) y otro de tipo numérico y de longitud 9 (para un identificador interno del puesto de trabajo).

 

Al respecto de lo dicho en el párrafo anterior, en FicheroSemaforos se informa del nombre del fichero que se va a usar para los semáforos; en CampoSemaforo, del código del campo cadena que guardará el código del semáforo; en CampoIdentificador, del código del campo numérico que guardará el identificador interno de puesto y en FichEsGeneral, de si FicheroSemaforos es un fichero general (cierto) o bien un fichero de proyecto (falso).

 

Es importante tener en cuenta que para que los semáforos funcionen adecuadamente, el fichero de semáforos debe tener un índice único definido sobre el campo de tipo cadena (el campo definido por CampoSemaforo).

 

Adicionalmente, en el parámetro TiempoReintento se indican los milisegundos que deben esperarse antes de reintentar poner en verde un semáforo que ha sido puesto en rojo por otro puesto; mientras que en TiempoEspera se indican los milisegundos que de transcurrirse sin que el semáforo se ponga en verde se entenderá que se trata de un semáforo de un puesto que finalizó inesperadamente, por lo que se dará como inválido y quedará anulado.

 

Si no se llama a este procedimiento, entonces CambiaSemaforo entiende que los valores a usar son los que corresponden a los valores por defecto de los parámetros de este procedimiento, los cuales se indican junto con la descripción de los parámetros, a continuación.

Módulo

G77_SEMAFOROS

Parámetros

Ver también

Ejemplo

VAR
        contador, idReg, Puesto: entero;
        (...)
 
INICIO
 
        // Configuración de los semáforos
        IniSemaforos('BLOQUEOS', 'C1', 'C2', falso, 100, 5000);
        (...)
 
        // Calcular próximo número de pedido, incrementar el contador y guardarlo.
        // Se usa el semáforo CONTADORPEDIDOS para que dos puestos no puedan nunca
        // realizar esta operación a la vez y así no pueda haber números de pedido
        // repetidos.
        CambiaSemaforo('CONTADORGENERAL', SmfRojo);
        Contador := ValorTablaCampanya('CONTADORES', 'C2', 'C1', 'CONTADORPEDIDOS');
        inc(Contador);
        AsignarValorTablaCampanya('CONTADORES', 'C2', Contador, 'C1', 'CONTADORPEDIDOS');
        CambiaSemaforo('CONTADORGENERAL', SmfVerde);
 
        // Grabar pedido
        NuevoRegistro('PEDIDOS', idReg);
        AsignarValorRegistro(idReg, 'C1', Contador);
        (...)
        GrabarRegistro(idReg);
        LiberarRegistro(idReg);
 
FIN.