Domanda

Ho creato un evento in un processo e per testarlo, ho inviato l'handle dell'evento tramite una pipe a un processo completamente separato (non un thread figlio)

Quando eseguo l'evento nel primo caso, WaitForSingleObject non rileva l'evento, quindi immagino che la risposta sia no a meno che non abbia perso qualche trucco nel struttura SECURITY_ATTRIBUTES?

O forse devo usare un evento con nome e chiamare OpenEvent ()?

In questo caso non posso usare i messaggi di finestra perché sto cercando di segnalare un servizio di Windows. Potrei usare la pipa, ma ci saranno molte di queste applicazioni e vorrei trovare un "basso costo" soluzione se possibile.

Altre opzioni come i file mappati in memoria hanno un sovraccarico ancora maggiore rispetto alla pipe?

Come lo faresti?

È stato utile?

Soluzione

Devi creare un evento con nome e aprirlo in entrambi i processi. Se hai più processi in ascolto, potresti prendere in considerazione l'utilizzo di un semaforo .

Altri suggerimenti

Sì, funziona:

  #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

In generale, ciò che ha un sovraccarico inferiore:

Tubi (presupponendo che siano specificate dimensioni ridotte)

MemMapFiles

Eventi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top