我想使用线程池来启动/取消重叠的读取操作——分别使用ReadFile()
和CancelIo()
——以及在读取操作完成时处理任何完成端口事件。
- 任何线程都可以发起读操作
- 任何线程都可以处理读取完成事件
- 只有发起读取的线程可以取消它(这是一个
CancelIo()
限制)
我不确定如何实现这一点。通常调用GetQueuedCompletionStatus()
等待完成端口事件和WaitForSingleObject()
等待正常事件,但不清楚如何混合两者。如果PostQueuedCompletionStatus()
让我指定要唤醒的特定线程,我会被设置。有任何想法吗?
更新:该解决方案必须在 Windows XP 上运行。不幸的是,这排除了使用CancelIoEx()
or GetQueuedCompletionStatusEx()
。