1
我有一些事件句柄,我將它們添加到列表中。我想知道是否可以存儲這些手柄,關閉本地手柄,然後再使用存儲手柄。關閉手柄/存儲手柄
例子:
std::map<std::string, HANDLE> Events;
DWORD OpenSingleEvent(std::string EventName, bool InheritHandle, DWORD dwDesiredAccess, DWORD dwMilliseconds)
{
Handle hEvent = OpenEvent(dwDesiredAccess, InheritHandle, EventName.c_str()); //Local Handle.
if (hEvent)
{
DeleteSingleEvent(EventName); //Delete the correct/old handle in the map.
Events.insert(EventName, hEvent); //Add this new handle to the map.
DWORD Result = WaitForSingleObject(hEvent, dwMilliseconds);
CloseHandle(hEvent); //Close THIS handle. Not the one in my Map.
return Result;
}
CloseHandle(hEvent); //Close this handle.
return WAIT_FAILED;
}
請問上面的工作?如果沒有,是否有另一種方法來做到這一點?它用於共享內存通信,所以我不能複製句柄,因爲我只有客戶端PID而不是服務器。
也可以有人解釋什麼InheritHandle做?我使用的函數是OpenEvent,它具有該參數,但我不確定它的作用。
我也應該指出,在你的問題中,即使事件是NULL,你也調用'CloseHandle'。這不會造成任何傷害,但毫無意義。 – Benj
Handles的列表代表事件列表,我想我可以關閉本地的,然後使用ResetEvent和列表中的那個,等等。 這是一種無用的關閉它,我猜。我只是不喜歡把手柄打開的想法。還有什麼繼承手柄呢? – Brandon
@CantChooseUsernames一旦你調用了'CloseHandle',就沒有事件再打開'ResetEvent'了。物體已經消失。您可以根據需要存儲儘可能多的'HANDLE'副本,但是在內核中只有一個對象。 – Benj