[英]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.