¿Pueden los eventos ser inter-proceso?
Pregunta
He creado un evento en un proceso y para probar, envié el controlador del evento a través de una canalización a un proceso totalmente separado (no un subproceso secundario)
Cuando lanzo el evento en la primera, WaitForSingleObject no detecta el evento, así que supongo que la respuesta es no, a menos que me haya perdido algún truco en ¿Estructura SECURITY_ATTRIBUTES?
¿O quizás necesito usar un evento con nombre y llamar a OpenEvent ()?
En este caso, no puedo usar mensajes de ventana porque estoy tratando de señalar un servicio de Windows. Podría usar la tubería, pero habrá muchas de estas aplicaciones, y me gustaría encontrar un " bajo costo " solución si es posible.
¿Otras opciones, como los archivos asignados en memoria, tienen incluso más sobrecarga que la canalización?
¿Cómo harías esto?
Solución
Debe crear un evento con nombre y abrirlo en ambos procesos. Si tiene varios procesos de escucha, puede considerar usar un semaphore .
Otros consejos
Sí, esto 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
En general, lo que tiene una menor sobrecarga:
Tuberías (asumiendo un tamaño pequeño especificado)
MemMapFiles
Eventos