Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
portuguese
Composition Setup
import.css=/download/attachments/3279126062824/newLayouttecnologia.css

Pagetitle

...

IPCWaitEx

...

...

...

IPCWaitEx

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
collapsefalse
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

 

Detalhes para o teste do código-fonte exemplo

  • Execute a função u_IPCLe() que iniciará o IPC e o colocará em espera.
  • Execute a função u_IpcGrava() que trocará informações entre os IPCs.
#INCLUDE "TOTVS.CH"
Bloco de código
themeEclipse
languagecpp
titleExemplo 1
linenumberstrue
collapsefalse
#DEFINE SEMAFORO 'IDUNICOTESTE'

#DEFINE 
// Semáforo para teste
// Inicia programa para teste do IPC
SEMAFORO 'IDUNICOTESTE'

User Function 
IPCLe
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 cEcho,nFree := 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

  • IPCCount, IPCGo

...