我正在研究的一些Unix代码取决于能够通过少量管道poll
。 poll
是一个POSIX系统调用(很像旧的select
)允许进程等待一个或多个文件描述符“准备好”进行读取或写入,这意味着可以继续执行此操作没有阻止。这对于实现事件循环很有用,其中等待与通信的其余部分明确分开。
是否可以对Windows管道句柄执行相同的操作 - 等待其中一个或多个处理器“准备好”进行读/写操作?
关于此事的现有SO建议,例如this question的答案,建议使用完成端口。但据我所知,完成端口需要事先启动读/写,然后等待(或被通知)这些操作的完成。这种方法不适合代码的体系结构,它强烈地将轮询代码与读/写代码分开,后者调用到使用底层句柄上的常规ReadFile
和WriteFile
的库。
如果没有直接等效于poll
,是否可以滥用完成端口提供类似的内容?换句话说,是否可以创建IO完成事件,宣布“您现在可以在此句柄上调用ReadFile
(WriteFile
)而不阻止”并使用WaitForMultipleObjects
或{等待它们{1}}?