Les événements peuvent-ils être interprocessus?
Question
J'ai créé un événement dans un processus et pour le tester, j'ai envoyé le descripteur d'événement via un canal à un processus totalement séparé (pas un thread enfant)
Lorsque je déclenche l'événement dans le premier, WaitForSingleObject ne détecte pas l'événement, donc je suppose que la réponse est non, sauf si j'ai manqué une astuce dans Structure SECURITY_ATTRIBUTES?
Ou peut-être dois-je utiliser un événement nommé et appeler OpenEvent ()?
Dans ce cas, je ne peux pas utiliser les messages Windows car j'essaie de signaler un service Windows. Je pourrais utiliser le tuyau, mais il y aura beaucoup de ces applications, et je voudrais trouver un "faible coût" solution si possible.
D'autres options, telles que les fichiers mappés en mémoire, sont encore plus lourdes que le tube?
Comment feriez-vous cela?
La solution
Vous devez créer un événement nommé et l'ouvrir dans les deux processus. Si vous avez plusieurs processus d'écoute, vous pouvez envisager d'utiliser un semaphore. .
Autres conseils
Oui cela fonctionne:
#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
En général, qu'est-ce qui a le moins de frais généraux:
Tuyaux (en supposant que la petite taille soit spécifiée)
MemMapFiles
Événements