Каковы последствия вызова CloseHandle более одного раза?
В документах написано "Вы не должны", но я думаю, что у меня есть реалистичный случай с именованными каналами, где ручка может быть закрыта снаружи (см. Конец поста).
В этом случае CloseHandle вызывает исключение в режиме отладки, что позволяет мне думать, что разработчики считают это серьезным, но документы не совсем ясны.
(Вежливый запрос: пожалуйста, избегайте ответа «просто не надо!» :-). Конечно, следует избегать закрытия рукопожатия более одного раза, и, конечно, есть хорошие методы, чтобы помочь с этим: мне просто интересно, что произойдет, если вы этого не сделаете).
Я слышал, что некоторые люди предполагают, что если бы дескриптор был быстро использован ОС, вы могли бы в конечном итоге закрыть другой, другой дескриптор.
Это вероятно?
Как Windows выбирает идентификаторы дескрипторов?
Есть ли какие-либо гарантии относительно того, как часто значение дескриптора будет повторно использоваться?
(например, TCP гарантирует, что номер порта не может быть повторно использован в течение определенного периода времени).
Можете ли вы закрыть ручки по типам ручек? Например, могу ли я думать, что я закрываю канал, но в итоге закрываю Событие?
Спасибо!
John
(Контекст к этому: я использую именованные каналы в модели клиент / сервер. Мне кажется очень трудным гарантировать, что точно одна сторона гарантированно закроет дескриптор, например, в случае сбоя / сбоя процесса. Возможно, я Я ошибаюсь, но, конечно, образец кода MSDN, по-моему, позволяет клиенту закрыть общий дескриптор, а затем, когда сервер пытается его закрыть, он уже закрыт).