import.css=/download/attachments/327912/newLayout.css |
Função: IPCWaitEx
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(). |
| Nome | Tipo | Descrição | Obrigatório | Referência |
| cSemaforo | Caracter | 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 |
#INCLUDE "TOTVS.CH"#DEFINE SEMAFORO 'IDUNICOTESTE' // Semáforo para teste// Inicia programa para teste do IPCUser Function IPCLe() MsgRun("Teste de IPCWaitEX","Esperando ... ",{|| IPCLE() } )Return// ---------------------------------------------------------------------------// Função prepara o IPC para ser utilizado// ---------------------------------------------------------------------------STATIC function IPCLE()Local cPar := '' , lRecconout('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 EnddoConout('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 ThreadslGoOk := IpcGo( SEMAFORO, "Enviando dados via IPC - a hora é: " + time() )If lGoOk cEcho += "Hora atual enviada para " +SEMAFOROElse cEcho += "Nao foi possível enviar a hora atual para " +SEMAFOROEndifMsgStop(cEcho)Return