关于完成端口一个细节性问题。
如果一个completion packet未用GetQueuedCompletionStatus函数取走,会不会影响后继的I/O请求?
举个例子(代码中省略了创建完成端口和将新连接socket与完成端口关联的部分):
在一个等待连接的线程中
for(;;)
{
new = Accept(.....)
ReadFile(.....);
}
在一个工作线程中
for(;;)
{
GetQueuedCompletionStatus(.....);
WriteFile(.........);
ReadFile(.......)
}
GetQueuedCompletionStatus在工作线程中的第一次调用是处理主线程中的ReadFile完成后发来的completion packet,接下来写一次socket,并不调用GetQueuedCompletionStatus,再读一次socket,现在进入下一次循环,我在测试时GetQueuedCompletionStatus总是返回ERROR_IO_PENDING。
为什么会这样呢??