我有一些事件句柄并将它们添加到列表中。我想知道我是否可以存储这些句柄,关闭本地的,以后仍然使用存储的。例子:std::mapEvents;DWORDOpenSingleEvent(std::stringEventName,boolInheritHandle,DWORDdwDesiredAccess,DWORDdwMilliseconds){HandlehEvent=OpenEvent(dwDesiredAccess,InheritHandle,EventName.c_str());//LocalHandle.if(hEvent){DeleteSingleEvent(EventName)
如果使用setEvent设置手动重置事件但不使用ResetEvent重置,会发生什么情况;并且该事件被多次触发。即在处理事件时,再次设置事件。以下是示例任务:voidfoo(){...SetEvent(hEvent1);...}voidfoo1(){...SetEvent(hEvent2);...}intMainHandler(){...dwEvent=WaitForMultipleObjects(2,ghEvents,//arrayofobjectsFALSE,//waitforanyobject5000);switch(dwEvent){casehEvent1://dosometh
当使用异步I/O(或Win32术语中的“重叠”I/O)时,我们需要处理OVERLAPPED结构和他的hEvent成员。如果I/O函数将延迟读取或写入操作,我们将得到一个ERROR_IO_PENDING错误代码,然后我们将等待异步操作完成一个WaitForXxxEvent函数,然后我们将调用GetOverlappedResult。但是,如果I/O操作立即完成,我们将不会得到ERROR_IO_PENDING,并且在读取操作中,我们的读取缓冲区将立即被填充。但是OVERLAPPED::hEvent成员呢?它会被设置为信号状态吗?我还没有找到关于这一点的明确声明。这个问题可能看起来毫无意义(如
根据MSDN:hEvent:IfanoverlappedI/OoperationisissuedwithoutanI/Ocompletionroutine(theoperation'slpCompletionRoutineparameterissettonull),thenthisparametershouldeithercontainavalidhandletoaWSAEVENTobjectorbenull.当我使用IOCP时,当我调用WSASend()或WSARecv()时,我将NULL传递给它们的最后一个参数(即lpCompletionRoutine):WSASend(pIoRe