如果我使用 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/