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 |