【发布时间】:2010-11-13 16:07:21
【问题描述】:
我正在使用 ctypes 模块在 Python 中使用 Windows DLL API 编写基于 IO 完成端口的服务器 (source code here)。但这是 API 的一个非常直接的用法,而且这个问题是针对那些了解 IOCP 而不是 Python 的人。
据我了解 CreateIoCompletionPort 的文档,当您使用与创建的 IOCP 关联的文件句柄(在我的情况下为套接字)调用此函数时,您指定了“用户定义的”完成键。当您开始调用 GetQueuedCompletionStatus 时,您将获得一个完成键值以及一个指向重叠对象的指针。完成键应标识已完成的重叠对象和请求。
但是,假设我在 CreateIoCompletionPort 调用中传入 100 作为完成键,并带有一个重叠的对象。当同一个重叠对象的 IO 完成并通过 GetQueuedCompletionStatus 返回时,伴随它的完成键要大得多,与原始值 100 没有任何相似之处。
我误解了完成键的工作原理,还是我在上面链接的源代码中做错了?
【问题讨论】:
标签: python windows winsock ctypes iocp