关于匿名管道阻塞的疑问

hhh_hao 2009-07-22 07:10:31
大家好,
我现在用匿名管道做进程间的通信,
我知道往空的管道中读数据,或往满的管道中写数据,都会造成阻塞。
有没有办法避免这个问题呢,查了一些资料,
发现可以在读的时候先调用PeekNamedPipe()看是否有数据,
那WriteFile的时候怎么解决呢,有什么函数查看管道是否满的吗?

希望有经验的高手帮我解决下这个难题,非常感激。
...全文
374 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy 2009-09-08
  • 打赏
  • 举报
回复
管道本身也不太适合传送大文件。
hxfjb 2009-09-08
  • 打赏
  • 举报
回复
1 这是一个同步和异步操作的问题,管道操作你可以看作是文件操作,在文件操作中会面临同样的问题,所以你可以选择异步函数,比如ReadFileEx和ReadFileEx。
2 管道的默认大小是4K,也就是说,如果你写8K的内容,则写入了4K,然后WriteFile函数阻塞,直到有人把内容读走,然后继续写剩余的4K。
lhy 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hhh_hao 的回复:]
还有个问题,父进程创建的管道,并向其写内容,本来是想让子进程去读的,结果父进程去读管道的时候,会读到自己的管道的内容,有没有办法限制呢?
[/Quote]
开两个管道,一个子写父读,一个父写子读
hhh_hao 2009-08-26
  • 打赏
  • 举报
回复
还有个问题,父进程创建的管道,并向其写内容,本来是想让子进程去读的,结果父进程去读管道的时候,会读到自己的管道的内容,有没有办法限制呢?
hhh_hao 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 nwpulei 的回复:]
管道的好处就是可以传递大量的数据。

他的实现是自动生成一个临时文件。

因此,要想把它装满在读数据太有难度了吧。


[/Quote]

这个开的缓存不大,很容易就满了
周成风 2009-07-26
  • 打赏
  • 举报
回复
这个。。我匿名管道通信就传个字符串什么的。。

如果需要传很多内容,可以考虑自己实现,比如写入文件再读等等。。当然得在效率要求不高的情况下。
nwpulei 2009-07-25
  • 打赏
  • 举报
回复
管道的好处就是可以传递大量的数据。

他的实现是自动生成一个临时文件。

因此,要想把它装满在读数据太有难度了吧。

realsupk 2009-07-24
  • 打赏
  • 举报
回复
为什么一定要用匿名管道呢?
hhh_hao 2009-07-24
  • 打赏
  • 举报
回复
原因我知道,
但是这样会出现就会阻塞,难道就没有办法防止?
做鸡真好吃 2009-07-24
  • 打赏
  • 举报
回复
mark~
hhh_hao 2009-07-24
  • 打赏
  • 举报
回复
那用什么好呢?命名管道?
hhh_hao 2009-07-23
  • 打赏
  • 举报
回复
没人知道吗?
zoulie 2009-07-23
  • 打赏
  • 举报
回复
匿名管道不允许异步操作,所以如在一个管道中写入数据,且缓冲区已满,那么除非另一个进程从管道中读出数据,从而腾出了缓冲区的空间,否则写入函数不会返回


15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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