O controle de semáforo no Protheus é feito utiizando-se duas funções:
LockByName (para criar um semáforo)
http://tdn.totvs.com/pages/releaseview.action?pageId=6814894
UnlockByName (para liberar o semáforo criado)
http://tdn.totvs.com/pages/releaseview.action?pageId=6814897
O conceito é o seguinte. Quando for iniciar a rotina verifique se pode criar um semáforo dessa forma:
If !LockByName("NOME_DA_SUA_ROTINA",.F.,.F.,.T.) MsgAlert("Rotina está sendo executada por outro usuário.") Return EndIf
Ao final da rotina desative o semáforo. Senão não vai conseguir rodar mais a rotina. Dessa forma:
UnLockByName("NOME_DA_SUA_ROTINA",.F.,.F.,.T.)
Em caso de queda de conexão e travamento dos semáforos, existe a pasta semaforo no Protheus_Data. Será necessário parar o serviço, apagar os arquivos e iniciar novamente o serviço. Isso resolve qualquer problema de semáforos padrões do sistema inclusive.
Essa dica foi enviada pelo amigo, consultor e programador Bruno Sobral, que pediu para não colocar os créditos, mas eu sou teimoso. Abraços 😉
One thought on “Controle de Semáforo no Protheus”