C++ 为什么GetQueuedCompletionStatus()不返回操作类型?

C++ 为什么GetQueuedCompletionStatus()不返回操作类型?,c++,sockets,winapi,network-programming,overlapped-io,C++,Sockets,Winapi,Network Programming,Overlapped Io,GetQueuedCompletionStatus()退出完成通知队列,但它不返回它是什么类型的通知(例如,读取通知、写入通知) 我有责任跟踪我发起的操作,例如,当我使用WSARecv()时,我在重叠的结构中添加一个标志,指示这是什么操作(在本例中读取),当我退出通知队列时,我读取该标志。那么,有人知道为什么GetQueuedCompletionStatus()不返回操作类型吗?为什么需要关心?您可以通过API传递用户数据,从而通过GetQueuedCompletionStatus()提取完成信

GetQueuedCompletionStatus()
退出完成通知队列,但它不返回它是什么类型的通知(例如,读取通知、写入通知)


我有责任跟踪我发起的操作,例如,当我使用
WSARecv()
时,我在
重叠的
结构中添加一个标志,指示这是什么操作(在本例中读取),当我退出通知队列时,我读取该标志。那么,有人知道为什么
GetQueuedCompletionStatus()
不返回操作类型吗?

为什么需要关心?您可以通过API传递用户数据,从而通过
GetQueuedCompletionStatus()
提取完成信息,那么您还需要什么呢?由于您可以使用
PostQueuedCompletionStatus()
发布自己的完成情况,因此您可以完成的“操作”数量是无限的,因此可以在“extended
OVERLAPPED
结构中传递它,您可以传递任何内容


如果您可以传递您自己的单独标志,那么它实际上不会消除作为扩展的
重叠的
结构传递额外内容的需要,因为能够随操作一起传递数据缓冲区和其他信息非常有用,因此一个额外的标志不太值得拥有。。。我的设计比你的设计需要更多,所以让我们来处理API设计师给我们的方法…

,因为你应该自己跟踪这一点。你得到的指针就是你的钥匙。从重叠中派生自己的结构来存储任何附加上下文是很常见的。操作的实际内容与GQCS的业务无关。这取决于你。它应该这样管理(作为每IO状态的一部分,通常通过重叠结构的扩展)。针对实际IO的IOCP编程(您也可以在没有IO的情况下使用它们)在很大程度上是一种状态机风格的编程,您可以在其中管理所述状态。