CreateNamedPipe使用同一个命名两次win7下成功XP下失败是为什么?

fxx_tmh2 2011-11-24 11:12:36
CreateNamedPipe创建命名管道时,

HANDLE hPipeTest
= CreateNamedPipe("\\\\.\\pipename",参数省略);

使用完后;
closehandle(hPipeTest);

此时再次创建hPipeTest
= CreateNamedPipe("\\\\.\\pipename",参数省略);

windows7操作系统创建成功,但windowsXP系统创建失败。这是什么原因呢?

请知情人士多多帮忙解疑呀~~

通过GetLastError得知,XP系统下连续创建2次同名的命名管道提示错误为231 所有的管道实例都在使用中。
...全文
253 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Snight 2011-11-24
  • 打赏
  • 举报
回复
纯猜测:
type1:
closehandle(hPipeTest);
只是给hPipeTest引用计数 -1;
未减到0时,内核不释放它,你还有地方不知情的情况下用着。

type1:
win7 和xp 对系统资源延迟释放,机制不一样。
譬如socket的timewait 状态,在不同系统实现不一样 介于75S 到4min 之间。
fxx_tmh2 2011-11-24
  • 打赏
  • 举报
回复
我关注的问题是:windows7为什么可以重复创建,而XP就不可以。win7是不是做了什么优化处理呢?
Gloveing 2011-11-24
  • 打赏
  • 举报
回复
可以创建一个新的命名管道,也可以只创建一个已存在的命名管道的新的实例;
但是 :
All instances of a named pipe must specify the same pipe type (byte-type or message-type), pipe access (duplex, inbound, or outbound), instance count, and time-out value.
xxweilw 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 quwei197874 的回复:]
最好同名的就创建一次,其余的操作读取就可
[/Quote]
同意,lz有必要重复创建吗
quwei197874 2011-11-24
  • 打赏
  • 举报
回复
最好同名的就创建一次,其余的操作读取就可
fxx_tmh2 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jptaozhantaozhan 的回复:]

纯猜测:
type1:
closehandle(hPipeTest);
只是给hPipeTest引用计数 -1;
未减到0时,内核不释放它,你还有地方不知情的情况下用着。

type1:
win7 和xp 对系统资源延迟释放,机制不一样。
譬如socket的timewait 状态,在不同系统实现不一样 介于75S 到4min 之间。
[/Quote]

这里测试时是没有其他东西干扰的,所以你说的第二种猜测还比较靠谱,只是很想知道win7在这里到底做了些什么呢

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧