¿Cuáles son las implicaciones de llamar a CloseHandle más de una vez?¿Es seguro "cerrar dos veces" un identificador con CloseHandle?
Los documentos dicen "no deberías", pero creo que tengo un caso realista con canalizaciones con nombre donde un identificador puede cerrarse externamente (ver al final de la publicación).
CloseHandle arroja una excepción en el modo de depuración en este caso, lo que me sugiere a los desarrolladores que esto es grave, pero los documentos no son exactamente claros.
(Solicitud cortés: Por favor, evite la respuesta "¡simplemente no!" :-). Por supuesto, uno debe evitar cerrar un handke más de una vez, y por supuesto hay buenas técnicas para ayudar con esto: estoy interesado en lo que sucede si no lo haces).
He oído que algunas personas sugieren que si el asa reutilizara rápidamente el asa, podría terminar cerrando otro asa diferente.
¿Esto es probable?
¿Cómo elige Windows identificaciones de identificadores?
¿Existe alguna garantía sobre la frecuencia con la que se reutilizará el valor de un asa?
(por ejemplo, TCP garantiza que un número de puerto no se puede reutilizar dentro de un determinado período de tiempo).
¿Se pueden cerrar las manijas entre los tipos de asa? Por ejemplo, ¿podría estar pensando que estoy cerrando una tubería pero terminaré cerrando un evento?
Gracias!
John
(Contexto a esto:. Estoy utilizando canalizaciones con nombre en un modelo cliente/servidor Me parece muy difícil asegurar que exactamente una de las partes está garantizada para cerrar el mango, por ejemplo, en un accidente de proceso/caso muerto. Tal vez estoy equivocado, pero ciertamente el código de ejemplo de MSDN me parece que permite que el cliente cierre el identificador compartido y luego, cuando el servidor intenta cerrarlo, ya está cerrado).
¿A qué "identificador compartido" se está refiriendo? Cada proceso debería crear * y * cerrando su propio identificador a la (misma) tubería. ¿Cómo se comparte un mango? Por desgracia, la respuesta ** es ** "simplemente no", pero eso se debe a que el identificador no debe ser compartido en absoluto. – shambulator