Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/3279126062824/newLayouttecnologia.css |
|
Pagetitle |
---|
...
|
...
...
...
|
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
Bloco de código | ||
---|---|---|
| ||
IPCWaitEx( <cSemaforo> cSemaforo >, <nTimeOut> ) --> lRet 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
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#DEFINE SEMAFORO 'IDUNICOTESTE' #DEFINE// Semáforo para teste // Inicia programa para teste do IPC SEMAFORO 'IDUNICOTESTE' User FunctionIPCLe ipcwaitex() MsgRun StartJob("Teste de IPCWaitEX","Esperando ... ",{|| IPCLE() } ) Return // --------------------------------------------------------------------------- // Função prepara o IPC para ser utilizado // --------------------------------------------------------------------------- STATIC function IPCLE() Local cPar := '' , lRec conout('Iniciando...') While !killapp() // Espera por 5 segundos ... lRec := IpcWaitEx(SEMAFORO,5000,@cPar) // Se recebeu chamada via IPC If lRec MsgStop(cPar,"Mensagem Recebida...") exit Else conout("Esperando...") Endif Enddo Conout('Finalizando...') Return // --------------------------------------------------------------------------- // Função enviará dados para o IPC, trocando informações entre as Threads // --------------------------------------------------------------------------- User Function IpcGrava() Local lGoOk := .F. Local cEchonFree := IpcCount(SEMAFORO) cEcho := "IPCs em Espera : "+str(nFree,4)+CRLF // Envia dados via IPC entre as Threads lGoOk := IpcGo( SEMAFORO, "Enviando dados via IPC - a hora é: " + time() ) If lGoOk cEcho += "Hora atual enviada para " +SEMAFORO Else cEcho += "Nao foi possível enviar a hora atual para " +SEMAFORO Endif MsgStop(cEcho) ReturnProtheus 10 , 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
...