views:

751

answers:

2

I have created an event in one process and to test, sent the event handle via a pipe to a totally separate process (not a child thread)

When I fire the event in the first, WaitForSingleObject does not detect the event so I am guessing the answer is no unless I missed some trick in the SECURITY_ATTRIBUTES structure?

Or perhaps I need to use a named event and call OpenEvent()?

In this case I cannot use window messages because I am trying to signal a windows service. I could use the pipe, but there will be many of these applications, and I would like to find a "low cost" solution if possible.

Other options like Memory mapped files have even more overhead than the pipe?

How would you do this?

+2  A: 

You need to create a named event and open it in both processes. If you have multiple processes listening, you may consider using a semaphore.

jeffamaphone
If the named events are used by different user accounts or sessions, may be necessary to provide an explicit ACL on creation.
Richard
Do you have an example of that?
Mike Trader
A: 

Yes this works:

  #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 general, what has a lower overhead:

Pipes (assuming small size specified)

MemMapFiles

Events

Mike Trader
Overhead in terms of memory or processing time?
jeffamaphone
I would like to understand the impact on both these resources.
Mike Trader