簡體   English   中英

事件可以跨進程嗎?

[英]Can Events be Inter-Process?

我在一個進程中創建了一個事件並進行測試,通過 pipe 將事件句柄發送到一個完全獨立的進程(不是子線程)

當我第一次觸發事件時,WaitForSingleObject 沒有檢測到事件,所以我猜答案是否定的,除非我錯過了SECURITY_ATTRIBUTES 結構中的一些技巧?

或者我可能需要使用命名事件並調用 OpenEvent()?

在這種情況下,我不能使用 window 消息,因為我試圖發出 windows 服務的信號。 我可以使用 pipe,但是會有很多這樣的應用,如果可能的話,我想找到一個“低成本”的解決方案。

Memory 映射文件等其他選項比 pipe 的開銷更大?

你會怎么做?

您需要創建一個命名事件並在兩個進程中打開它。 如果您有多個進程在監聽,您可以考慮使用semaphore

是的,這有效:

  #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

一般來說,什么具有較低的開銷:

管道(假設指定小尺寸)

內存映射文件

活動

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM