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