BindIoCompletionCallback 関数 (winbase.h)
スレッド プールが所有する I/O 完了ポートを、指定したファイル ハンドルに関連付けます。 このファイルに関連する I/O 要求が完了すると、I/O 以外のワーカー スレッドによって、指定されたコールバック関数が実行されます。
構文
BOOL BindIoCompletionCallback(
[in] HANDLE FileHandle,
[in] LPOVERLAPPED_COMPLETION_ROUTINE Function,
[in] ULONG Flags
);
パラメーター
[in] FileHandle
重複した I/O 完了のために開かれたファイルのハンドル。 このハンドルは、FILE_FLAG_OVERLAPPED フラグを使用して CreateFile 関数によって返されます。
[in] Function
I/O 操作が完了したときに I/O 以外のワーカー スレッドで実行されるコールバック関数へのポインター。 このコールバック関数は 、TerminateThread 関数を呼び出してはなりません。
完了ルーチンの詳細については、「 FileIOCompletionRoutine」を参照してください。
[in] Flags
このパラメーターは 0 である必要があります。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 拡張エラー情報を取得するには、 GetLastError 関数を呼び出します。
解説
プロセスが FileHandle パラメーターで指定されたファイルに対して非同期要求を発行したが、要求がERROR_IO_PENDING以外のエラー コードで直ちに返される場合、コールバック関数は実行されない可能性があります。
非同期 I/O 要求を開始するスレッドが、要求が完了する前に終了しないようにしてください。 また、DLL 内の関数がワーカー スレッドにキューに登録されている場合は、DLL の関数が DLL のアンロード前に実行を完了していることを確認してください。
スレッド プールは、I/O 完了ポートを保持します。 BindIoCompletionCallback を呼び出すと、指定されたファイルがスレッド プールの I/O 完了ポートに関連付けられます。 そのファイル オブジェクトに対する非同期要求は、完了ポートにポストすることで完了し、スレッド プールのワーカー スレッドによって取得されます。 非同期プロシージャ呼び出しとして完了する I/O 要求を発行する必要があるコールバックの場合、スレッド プールは I/O ワーカー プールを提供します。 I/O ワーカー スレッドは、完了ポートで待機しません。完了した I/O 要求パケットをウェイクアップできるように、アラート可能な待機状態でスリープ状態になります。 どちらの種類のワーカー スレッドも、保留中の I/O があるかどうかを確認し、存在する場合は終了しません。 詳細については、「 非同期プロシージャ呼び出し」を参照してください。
この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNTを 0x0500 以降として定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |