Page tree
Skip to end of metadata
Go to start of metadata

Coloca em modo de espera a thread em execução, criando um semáforo nomeado, e aguarda por um determinado período pela liberação desse semáforo. A liberação do semáforo pode ocorrer por time-out, ou através da chamada da função IPCGo() por outro processo, utilizando como parâmetro o nome do semáforo nomeado criado pela IPCWaitEx(). Além disso, a liberação semáforo pela função IPCGo() pode enviar parâmetros adicionais, recuperados pela função IPCWaitEx().

Sintaxe

IPCWaitEx( < cSemaforo >, < nTimeOut > )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cSemaforo

caractere

Indica o nome do semáforo que estamos trabalhando. Observação: O nome do semáforo não pode conter letras minúsculas. Todas as letras devem ser maiúsculas.

X

 

nTimeOut

numérico

Indica o tempo de time-out em milisegundos para a thread sair do ar.

X

 

Retorno

Nome

Tipo

Descrição

lRet

lógico

Retorna verdadeiro (.T.), se receber uma chamada da função IPCGo(); caso contrário, falso (.F.), se não receber chamada ou sair por time-out.

Observações

  • É importante que o semáforo seja preenchido com letras maiúsculas.
  • Essa função recebe até 15 argumentos opcionais, por referência, que permitem recuperar os parâmetros opcionais passados na chamada da função IPCGo().
  • A função recebe como segundo parâmetro <nTimeOut>, em milissegundos, que estabelece quanto tempo o processo atual permanecerá em modo de espera, aguardando pela liberação do semáforo através da IPCGo().
  • Se, no tempo estabelecido, o semáforo não for liberado explicitamente através da IPCGo(), o semáforo é liberado por time-out, a função rertorna falso (.F.), e o fluxo de execução do programa continua.
  • Observe que foi indicado um valor de semáforo para a função.

Exemplos

Exemplo 1
#DEFINE SEMAFORO 'IDUNICOTESTE'

#DEFINE SEMAFORO 'IDUNICOTESTE'

User Function ipcwaitex()
  StartJob("U_ipcjobs",GetEnvServer(),.F.)
  StartJob("U_ipcjobs",GetEnvServer(),.F.)
  

  Sleep( 7000 )
  
  IPCGo( SEMAFORO, "Data atual " + cvaltochar(date()) )
  
Return

User Function ipcjobs()
  Local cPar
  while !killapp()
    lRet := IpcWaitEx( SEMAFORO, 5000, @cPar )
    if lRet
      conout(cPar)
      exit
    endif
  enddo
Return

Abrangência

Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server

Veja também

  • No labels