c++ - 使用 CreateEvent 创建/打开一个已经存在的偶数是否会重置信号?

标签 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 (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);

关于c++ - 使用 CreateEvent 创建/打开一个已经存在的偶数是否会重置信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732015/

相关文章:

c++ - 如何在C++中使用 "type ... pack-name"参数包?

c++ - 在 OpenMP for 循环中更新 HashMap

.net - 为什么 System.Windows.Threading.DispatcherTimer 不触发事件?

c++ - 如何在 Visual Studio 2008 中包含头文件?

c++ - C++中的现代解释器代码?

c++ - 无法加载共享对象 : undefined symbol

JavaFX从另一个线程访问gui按钮操作

c++ - malloc/new 锁和多线程

javascript - 如何从页面中删除每个监听器?

node.js - 在 Node.js 中 - 事件(EventEmitter 和 Listener Function 对象)和异步回调之间是否有任何关系