#INCLUDE "TOTVS.CH"
#DEFINE SEMAFORO 'IDUNICOTESTE' // Semáforo para teste
// Inicia programa para teste do IPC
User Function IPCLe()
MsgRun("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 cEchonFreecEcho,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)
Return