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