Will using CreateEvent to create/open an even that already exists reset the signal?

14,470

The second call will open the event, it will not change the event's state.

I know this because the documentation says that it opens it but not that it resets it. If it reset it, that would be important enough to mention.

HANDLE responseWaitEvent = CreateEvent(NULL,        // no security
    TRUE,       // manual-reset event
    TRUE,      // signaled
    (LPTSTR)_T("TESTEvent")); // event name
    assert(responseWaitEvent && "Could not create event");

responseWaitEvent = CreateEvent(NULL,        // no security
    TRUE,       // manual-reset event
    FALSE,      // not signaled
    (LPTSTR)_T("TESTEvent")); // event name

    assert(responseWaitEvent && "Could not open event");

DWORD dw = WaitForSingleObjectEx(responseWaitEvent, 10000, FALSE);
assert(dw != WAIT_TIMEOUT);

And the opposite:

HANDLE responseWaitEvent2 = CreateEvent(NULL,        // no security
    TRUE,       // manual-reset event
    FALSE,      // not signaled
    (LPTSTR)_T("TESTEvent2")); // event name
    assert(responseWaitEvent && "Could not create event");

responseWaitEvent2 = CreateEvent(NULL,        // no security
    TRUE,       // manual-reset event
    TRUE,      // signaled
    (LPTSTR)_T("TESTEvent2")); // event name
    assert(responseWaitEvent && "Could not open event");

DWORD dw2 = WaitForSingleObjectEx(responseWaitEvent2, 10000, FALSE);
assert(dw2 == WAIT_TIMEOUT);
Share:
14,470
Mike
Author by

Mike

Updated on June 04, 2022

Comments

  • Mike
    Mike almost 2 years

    If I use CreateEvent to open an event:

     responseWaitEvent = CreateEvent(NULL,        // no security
      TRUE,       // manual-reset event
      FALSE,      // not signaled
      (LPTSTR)eventName); // event name
    

    And this event already exists and has been signaled. Will this call reset the signal (because of setting initial state to FALSE).

    Or will it immediately exit the wait when called:

     if (responseWaitEvent)
     {
      DWORD dw = WaitForSingleObjectEx(responseWaitEvent, m_ResponseTimeoutMillis, FALSE);
    
  • Mike
    Mike over 13 years
    And the wait will immediately exit because the event has already been signaled, correct?
  • Brian R. Bondy
    Brian R. Bondy over 13 years
    @Mike: Yup in example 1 above it will return instantly, in example 2 it will wait 10 seconds then return.