【发布时间】:2010-07-06 02:50:56
【问题描述】:
多次调用 CloseHandle 有什么影响?
文档说“你不应该”,但我认为我有一个使用命名管道的现实案例,其中一个句柄可能在外部关闭(见帖子末尾)。
在这种情况下,CloseHandle 在调试模式下抛出异常,这表明开发人员认为这很严重,但文档并不完全清楚。
(礼貌请求:请避免回答“只是不要!”:-)。当然,一个人应该避免多次收手,当然有一些很好的技巧可以帮助解决这个问题:我只是对如果你不这样做会发生什么感兴趣)。
我听说有人建议,如果操作系统快速重用句柄,您最终可能会关闭另一个不同的句柄。
这可能吗?
Windows 如何选择句柄 ID?
是否可以保证句柄值的重复使用频率?
(例如 TCP 确保端口号在特定时间范围内不能重复使用)。
您可以关闭跨句柄类型的句柄吗?例如,我是否会认为我正在关闭管道但最终关闭了一个事件?
谢谢!
约翰
(上下文:我在客户端/服务器模型中使用命名管道。在我看来,很难确保确切地一方保证关闭句柄,例如在进程崩溃/被杀死的情况下。也许我' 错了,但在我看来 MSDN 示例代码肯定允许客户端关闭共享句柄,然后当服务器尝试关闭它时,它已经关闭了)。
【问题讨论】:
-
你指的是什么“共享句柄”?每个进程都应该创建并关闭它自己的(相同的)管道句柄。句柄如何最终被共享?唉,答案是“只是不要”,但那是因为句柄根本不应该被共享。