如果我使用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);
答案 0 :(得分:3)
第二个电话会打开事件,不会改变事件的状态。
我知道这是因为文档说它会打开它但不会重置它。如果重置它,那就足够重要了。
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);
答案 1 :(得分:0)
使用现有事件的名称调用CreateEvent会打开具有该名称的现有事件,但根本不会重置它,即它不会更改其状态。
此外,CreateEvent不会重置已存在的事件。
ResetEvent应该执行此操作,而不是CreateEvent。