C++ 使用CreateEvent创建/打开已存在的偶数会重置信号吗?

C++ 使用CreateEvent创建/打开已存在的偶数会重置信号吗?,c++,multithreading,events,visual-c++,winapi,C++,Multithreading,Events,Visual C++,Winapi,如果我使用CreateEvent打开事件: responseWaitEvent = CreateEvent(NULL, // no security TRUE, // manual-reset event FALSE, // not signaled (LPTSTR)eventName); // event name 此事件已存在并已发出信号。此呼叫是否会重置信号(因为将初始状态设置为FALSE) 或者在调用时它是否会立即退出等待: if (

如果我使用CreateEvent打开事件:

 responseWaitEvent = CreateEvent(NULL,        // no security
  TRUE,       // manual-reset event
  FALSE,      // not signaled
  (LPTSTR)eventName); // event name
此事件已存在并已发出信号。此呼叫是否会重置信号(因为将初始状态设置为FALSE)

或者在调用时它是否会立即退出等待:

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

第二次调用将打开事件,但不会更改事件的状态

我知道这一点,因为文档中说它会打开它,但不会重置它。如果它重置了它,那就足够重要了

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

使用现有事件的名称调用CreateEvent将打开具有该名称的现有事件,但根本不会重置它,即它不会更改其状态

此外,没有CreateEvent重置已存在事件的逻辑


ResetEvent应该执行此操作,而不是CreateEvent。

等待将立即退出,因为事件已发出信号,对吗?@Mike:Yup在上面的示例1中,它将立即返回,在示例2中,它将等待10秒,然后返回。