2009-03-09 15 views
6

Ho generato un evento in un unico processo e per testare, inviato il manico evento attraverso un tubo ad un processo totalmente separato (non un thread figlio)Gli eventi possono essere Inter-Process?

Quando sparo l'evento nel primo, WaitForSingleObject non rileva la evento quindi suppongo che la risposta sia no a meno che non mi sia sfuggito qualche trucco nello SECURITY_ATTRIBUTES structure?

O forse ho bisogno di usare un evento chiamato e chiamare OpenEvent()?

In questo caso non è possibile utilizzare i messaggi della finestra perché sto tentando di segnalare un servizio Windows. Potrei usare il tubo, ma ci saranno molte di queste applicazioni, e mi piacerebbe trovare una soluzione "a basso costo" se possibile.

Altre opzioni come i file mappati in memoria hanno un sovraccarico ancora maggiore rispetto al tubo?

Come lo faresti?

risposta

3

È necessario creare un evento denominato e aprirlo in entrambi i processi. Se si dispone di più processi in ascolto, è possibile prendere in considerazione l'utilizzo di semaphore.

+0

Se il gli eventi con nome vengono utilizzati da diversi account utente o sessioni, potrebbe essere necessario fornire un ACL esplicito sulla creazione. – Richard

+0

Avete un esempio di questo? –

0

Sì questo 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 overhead inferiore:

Tubi (supponendo piccola dimensione specificata)

MemMapFiles

Eventi

+0

Overhead in termini di memoria o tempo di elaborazione? –

+0

Vorrei capire l'impatto su entrambe queste risorse. –

Problemi correlati