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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top