重複する操作

重複する操作により、スレッドはバックグラウンドで時間のかかる I/O 操作を実行し、スレッドは他のタスクを自由に実行できます。 通信リソースに対して重複する I/O 操作を有効にするには、スレッドがハンドルを開くときに、CreateFile 関数で FILE_FLAG_OVERLAPPED フラグを指定する必要があります。 ReadFile または WriteFile関数を重複する操作として実行するには、呼び出し元のスレッドは、OVERLAPPED 構造体へのポインターを指定する必要があります。 OVERLAPPED 構造体には、(自動リセットではなく) 手動リセットイベント オブジェクトへのハンドルが含まれている必要があります。 操作が完了する前に I/O 関数の呼び出しが戻ったときに、イベント オブジェクトの状態が通知されないように設定されます。 操作が完了すると、イベント オブジェクトの状態がシグナル通知に設定されます。 スレッドは待機関数を使用して、イベント オブジェクトの現在の状態を確認するか、その状態が通知されるのを待機します。

ReadFileEx 関数と WriteFileEx関数は、重複する操作としてのみ実行できます。 呼び出し元のスレッドは、重複する操作が完了したときに実行される FileIOCompletionRoutine 関数へのポインターを指定します。 完了ルーチンは、呼び出し元のスレッドが警告可能な操作を実行する場合にのみ実行されます。

イベント オブジェクト、待機関数、警告可能な待機、および完了ルーチンの詳細については、「同期について」を参照してください。