スレッドプールを使用して、重複した読み取り操作を開始/キャンセルします(それぞれを使用してReadFile()) 。またCancelIo()、読み取り操作が完了したときに完了ポートイベントを処理します。
- どのスレッドでも読み取り操作を開始できます
- どのスレッドも読み取り完了イベントを処理できます
- 読み取りを開始したスレッドのみがそれをキャンセルできます(これは
CancelIo()制限です)
これを実装する方法がわかりません。GetQueuedCompletionStatus()通常、完了ポートイベントを待機し、通常のイベントを待機するように呼び出しWaitForSingleObject()ますが、この2つを組み合わせる方法は明確ではありません。PostQueuedCompletionStatus()ウェイクアップする特定のスレッドを指定できるとしたら、設定されます。何か案は?
更新:ソリューションはWindowsXPで実行する必要があります。残念ながら、これはまたはの使用を除外しCancelIoEx()ますGetQueuedCompletionStatusEx()。