Windows轮询或在命名管道上选择

时间:2010-10-12 04:53:34

标签: pipe named-pipes winapi windows

我可以在Windows中的命名管道句柄上使用select和poll吗?如果可以给出一个例子,那将是很好的。 (我对Windows编程很新)

如果其中一个进程发生故障而我正在另一端进行轮询,那么我是否会在另一个进程上收到进程已关闭的错误消息?

2 个答案:

答案 0 :(得分:4)

不幸的是没有。 Windows通过重叠的I / O和I / O完成端口为异步通信提升了两种不同的模式。

简而言之,当I / O操作完成时,重叠的I / O会短暂地接收回调。当I / O操作完成时,IOCP正在端口上接收事件,并允许应用程序同时扩展许多套接字的处理。

http://en.wikipedia.org/wiki/Iocp

最糟糕的情况是,您可以将IOCP线程固定到命名管道上,并通过socketpair生成事件,以便在selectWSAPoll中进行处理。

答案 1 :(得分:0)

如果您正在对管道进行非阻塞读取,则管道另一端的关闭(通过进程失败)将导致该读取返回,并显示错误。

如果您正在执行阻塞读取,则读取将失败,因为管道已断开连接。