Controle de Semáforo no Protheus

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 😉

Anúncios