Будет ли использовать CreateEvent для создания / открытия уже существующего сброса сигнал? - PullRequest
2 голосов
/ 17 сентября 2010

Если я использую CreateEvent, чтобы открыть событие:

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

И это событие уже существует и было сообщено. Будет ли этот вызов сбрасывать сигнал (из-за установки начального состояния в ЛОЖЬ).

Или он немедленно выйдет из режима ожидания при вызове:

 if (responseWaitEvent)
 {
  DWORD dw = WaitForSingleObjectEx(responseWaitEvent, m_ResponseTimeoutMillis, FALSE);

Ответы [ 2 ]

3 голосов
/ 17 сентября 2010

Второй вызов откроет событие, но не изменит его состояние.

Я знаю это, потому что в документации сказано, что он открывает его, но не сбрасывает его. Если это сбросит это, это было бы достаточно важно упомянуть.

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);

И наоборот:

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);
0 голосов
/ 26 июня 2018

Вызов CreateEvent с именем существующего события открывает существующее событие с этим именем, но не сбрасывает его вообще, т. Е. Не изменяет его состояние.

Также нет логики, что CreateEvent сбрасывает уже существующее событие.

ResetEvent должен делать это, а не CreateEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...