【发布时间】:2015-02-25 18:32:04
【问题描述】:
GetQueuedCompletionStatus()出列完成通知,但它不返回它是什么类型的通知(例如,读取通知,写入通知)。
我有责任跟踪我启动了哪些操作,例如,当我使用 WSARecv() 时,我在 OVERLAPPED 结构中添加一个标志,指示这是什么操作(在这种情况下读取),以及何时我出列通知,我读了这个标志。那么有谁知道GetQueuedCompletionStatus()为什么不返回操作的类型吗?
【问题讨论】:
-
因为您应该自己跟踪。你拿回来的指针就是你的钥匙。从 OVERLAPPED 派生出自己的结构来存储任何额外的上下文是很常见的。
-
实际操作与
GQCS无关。这取决于您。它应该这样管理(作为每个 IO 状态的一部分,通常通过 OVERLAPPED 结构的扩展)。用于实际 IO 的 IOCP 编程(你也可以在没有 IO 的情况下使用它们)是一种状态机风格的编程,你管理所说的状态。
标签: c++ sockets winapi network-programming overlapped-io