关于WINDOWS命名管道异步的问题

like_33833006 2009-06-27 08:38:25
windows命名管道怎么使用异步结构?而达到异步传输。
在connectnamedpipe()中把这个参数(Overlapped )填上去使其不会阻塞,但在后面readfile和writefile中的Overlapped与之前connectnamedpipe中的有关系吗,如果是这样,那每次在读或写的时候都声明一个Overlapped就可以实现异步了吗?我觉得Overlapped 应该不是这么简单希望那位大侠可以详细说一异步。
还有在同一时刻读和写是否能同时操作?
...全文
688 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2009-06-28
  • 打赏
  • 举报
回复
可不可以试着建立两条单向的管道来解决问题?
like_33833006 2009-06-28
  • 打赏
  • 举报
回复
我已经试过了,在同一时刻内,只能进行读或写(文件中就不知道了,不过在PIPE中同时进行读写的话,效果非常糟糕,),我用了一个写操作优先解决了这个问题。
like_33833006 2009-06-27
  • 打赏
  • 举报
回复
我试过在一个线程中用读而另一个线程中写,其中有一个会阻塞。
晨星 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 like_33833006 的回复:]
我明白是双向的,我的意思是同一时刻,又写又读。因为有一个线程在循环读,而主进程在执行写。这样就相当于读和写都在同时进行。
[/Quote]
是啊,我前面不说了么,对于双向的管道,这应该是没有问题的。
like_33833006 2009-06-27
  • 打赏
  • 举报
回复
我明白是双向的,我的意思是同一时刻,又写又读。因为有一个线程在循环读,而主进程在执行写。这样就相当于读和写都在同时进行。
晨星 2009-06-27
  • 打赏
  • 举报
回复
在异步情况下OVERLAPPED参数不要设为NULL,否则会有一些问题。
创建管道时,如果open mode里还包含PIPE_ACCESS_DUPLEX,而不是PIPE_ACCESS_INBOUND或PIPE_ACCESS_OUTBOUND,那管道就是双向的。

like_33833006 2009-06-27
  • 打赏
  • 举报
回复
客户端一连接到服务器就会启动一个线程,这个线程负责读(readfile())来自服务端的数据。
如果服务器没数据传,而我要发数据到服务器端,这时读和写都调用了。管道能在同一时间内读和写吗?

在异步的情况下readfile和writefile的最后一个参数设为OVERLAPPED与NULL有什么差别????
晨星 2009-06-27
  • 打赏
  • 举报
回复
创建管道的时候,有个open mode参数,需要指定为FILE_FLAG_OVERLAPPED,只有这样,才可以在之后的其它调用中使用OVERLAPPED参数,至于OVERLAPPED参数的用法,也挺烦人,还是查查MSDN吧,MSDN在描述每种相关的API(比如ReadFile/WriteFile)时,都详细解释了这个参数的用法。
如果只是不想阻塞,可以简单地把OVERLAPPED结构体的所有成员都设为0,比如需要时定义一个局部变量:
OVERLAPPED ol = {0};
然后就直接把&ol作为参数传进去。
like_33833006 2009-06-27
  • 打赏
  • 举报
回复
创建管道时没有OVERLAPPED这个结构指针。我的疑问就在读和写还侦听上他们都有OVERLAPPED这个结构,不知道这三个函数中的OVERLAPPED结构(里面的事件有什么作)有没有联系。用之前都声明一个OVERLAPPED,并使用手动的事件,这有什么作用??设置完事件后就不管了吗?
晨星 2009-06-27
  • 打赏
  • 举报
回复
首先,你说的好像不对。ConnectNamedPipe是等待客户端的连接,而非创建管道。对于创建或连续管道的行为,比如CreateNamedPipe,CreateFile,CallNamePipe等等,它们跟ReadFile/WriteFile以及OVERLAPPED模式的关系比较大。首先,这个管理创建或连接时必需指定为异步的,然后在ReadFile/WriteFile时才可以是异步的。
至于同时读写,我想DUPLEXED的管道应该是可以的,不过不是很确定。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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