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

関連項目

FileIOCompletionRoutine

プロセス関数とスレッド関数

スレッド プール