Закрывающие ручки / хранимые ручки

У меня есть несколько дескрипторов событий, и я добавляю их в список. Я хочу знать, смогу ли я сохранить эти маркеры, закрыть локальные и все еще использовать сохраненные позже.

Пример:

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, и у нее есть этот параметр, но я не уверен, что она делает.

1

Решение

HANDLE это просто void *это токен, который фактически представляет объект в пространстве ядра. призвание CloseHandle фактически освобождает объект ядра, поэтому краткий ответ на ваш вопрос — нет, вы не можете сохранить их список, а затем закрыть все локальные. Все, что у вас будет, это список void* которые ничего не представляют.

Что вы можете сделать, это использовать DuplicateHandle который фактически создает другой объект ядра от вашего имени. Однако … почему бы просто не закрыть ручки, когда вы закончили с записью в списке?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]