Могут ли события быть межпроцессными? - PullRequest
7 голосов
/ 09 марта 2009

Я создал событие в одном процессе и, чтобы проверить, отправил дескриптор события через канал в совершенно отдельный процесс (не дочерний поток)

Когда я запускаю событие в первом, WaitForSingleObject не обнаруживает событие, поэтому я предполагаю, что ответ - нет, если я не пропустил какой-то трюк в структуре SECURITY_ATTRIBUTES?

Или, возможно, мне нужно использовать именованное событие и вызвать OpenEvent ()?

В этом случае я не могу использовать оконные сообщения, потому что я пытаюсь сигнализировать службе Windows. Я мог бы использовать трубу, но таких приложений будет много, и я хотел бы найти «дешевое» решение, если это возможно.

Другие параметры, такие как файлы, отображенные в памяти, имеют даже больше ресурсов, чем конвейер?

Как бы вы это сделали?

Ответы [ 2 ]

3 голосов
/ 09 марта 2009

Вам необходимо создать именованное событие и открыть его в обоих процессах. Если у вас прослушивается несколько процессов, вы можете использовать семафор .

0 голосов
/ 09 марта 2009

Да, это работает:

  #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

В общем, что имеет меньшие накладные расходы:

Трубы (при условии, что указан небольшой размер)

MemMapFiles

События

...