在Windows上管道的select或poll等效

时间:2017-01-28 21:39:17

标签: c winapi pipe

我正在研究的一些Unix代码取决于能够通过少量管道pollpoll是一个POSIX系统调用(很像旧的select)允许进程等待一个或多个文件描述符“准备好”进行读取或写入,这意味着可以继续执行此操作没有阻止。这对于实现事件循环很有用,其中等待与通信的其余部分明确分开。

是否可以对Windows管道句柄执行相同的操作 - 等待其中一个或多个处理器“准备好”进行读/写操作?

关于此事的现有SO建议,例如this question的答案,建议使用完成端口。但据我所知,完成端口需要事先启动读/写,然后等待(或被通知)这些操作的完成。这种方法不适合代码的体系结构,它强烈地将轮询代码与读/写代码分开,后者调用到使用底层句柄上的常规ReadFileWriteFile的库。

如果没有直接等效于poll,是否可以滥用完成端口提供类似的内容?换句话说,是否可以创建IO完成事件,宣布“您现在可以在此句柄上调用ReadFileWriteFile)而不阻止”并使用WaitForMultipleObjects或{等待它们{1}}?

0 个答案:

没有答案