Pergunta

Eu criei um evento em um processo e teste, enviou o identificador de evento através de um tubo a um processo totalmente separado (não um segmento de criança)

Quando eu acionar o evento no primeiro, WaitForSingleObject não detecta o evento, então eu estou supondo que a resposta é não menos que eu perdi algum truque na estrutura SECURITY_ATTRIBUTES?

Ou talvez eu preciso usar um evento nomeado e chamar OpenEvent ()?

Neste caso, eu não pode usar mensagens de janela, porque eu estou tentando sinalizar um serviço do Windows. Eu poderia usar o tubo, mas haverá muitas dessas aplicações, e eu gostaria de encontrar uma solução "de baixo custo", se possível.

Outras opções como memória mapeada arquivos têm ainda mais sobrecarga do que o tubo?

Como você faria isso?

Foi útil?

Solução

Você precisa criar um evento nomeado e abri-lo em ambos os processos. Se você tem vários processos de escuta, você pode considerar usar um semáforo .

Outras dicas

Sim isso funciona:

  #COMPILE EXE "NamedEvent.exe"

  #INCLUDE "win32api.inc" 

  %EVENT_ALL_ACCESS = &h0001F0003

  FUNCTION PBMAIN() AS LONG  

    LOCAL lRet AS LONG, lError AS LONG, lEventName AS ASCIIZ * %MAX_PATH
    lEventName = "TestEvent"
    lRet   = CreateEvent (BYVAL %NULL, %False, %False, lEventName)
    lError = GetLastError ()
    IF ISFALSE lRet THEN
      MSGBOX "Unable to create Event, error:" + STR$(lError),,"CreateEvent error"
    ELSE
      IF lError = %ERROR_ALREADY_EXISTS THEN
        lRet = OpenEvent(BYVAL %EVENT_ALL_ACCESS, %False, lEventName)
        lError = GetLastError()
        IF lRet THEN
          MSGBOX "Opened existing Event, handle:" + STR$(lRet),,"OpenEvent:"
        ELSE
          MSGBOX "Unable to open Event, error:" + STR$(lError),,"OpenEvent error" : EXIT FUNCTION
        END IF
      ELSE
        MSGBOX "Created new Event, handle:" + STR$(lRet),,"CreateEvent:"
      END IF
    END IF    

  END FUNCTION

Em geral, o que tem uma sobrecarga menor:

Pipes (assumindo tamanho pequeno especificado)

MemMapFiles

Eventos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top