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 完成打开的文件的句柄。 此句柄由 CreateFile 函数返回,带有 FILE_FLAG_OVERLAPPED 标志。

[in] Function

指向回调函数的指针,该回调函数将在 I/O 操作完成时在非 I/O 工作线程中执行。 此回调函数不得调用 TerminateThread 函数。

有关完成例程的详细信息,请参阅 FileIOCompletionRoutine

[in] Flags

此参数必须为零。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 若要获取扩展错误信息,请调用 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

进程和线程函数

线程池