LPOVERLAPPED_COMPLETION_ROUTINE回调函数 (minwinbase.h)
与 ReadFileEx 和 WriteFileEx 函数一起使用的应用程序定义的回调函数。 当异步输入和输出 (I/O) 操作完成或取消,并且调用线程处于可警报状态 (时,将使用 SleepEx、MsgWaitForMultipleObjectsEx、WaitForSingleObjectEx 或 WaitForMultipleObjectsEx 函数) 设置为 TRUE) 调用线程。
LPOVERLAPPED_COMPLETION_ROUTINE类型定义指向此回调函数的指针。 FileIOCompletionRoutine 是应用程序定义的函数名称的占位符。
语法
LPOVERLAPPED_COMPLETION_ROUTINE LpoverlappedCompletionRoutine;
void LpoverlappedCompletionRoutine(
[in] DWORD dwErrorCode,
[in] DWORD dwNumberOfBytesTransfered,
[in, out] LPOVERLAPPED lpOverlapped
)
{...}
参数
[in] dwErrorCode
I/O 完成状态。 此参数可以是 系统错误代码之一。
[in] dwNumberOfBytesTransfered
已传输的字节数。 如果发生错误,此参数为零。
[in, out] lpOverlapped
指向异步 I/O 函数指定的 OVERLAPPED 结构的指针。
调用完成例程后,系统不使用 OVERLAPPED 结构,因此完成例程可以解除分配重叠结构使用的内存。
返回值
无
备注
异步操作的返回值为 0 (ERROR_SUCCESS) 如果操作成功完成,或者操作已完成但出现警告。 若要确定 I/O 操作是否已成功完成,检查 dwErrorCode 为 0,请调用 GetOverlappedResult,然后调用 GetLastError。 例如,如果缓冲区不够大,无法接收来自 ReadFileEx 调用的所有数据,dwErrorCode 设置为 0,GetOverlappedResult 将失败,GetLastError 返回ERROR_MORE_DATA。
从此函数返回允许调用另一个挂起的 I/O 完成例程。 所有等待完成例程在可警报线程的等待完成之前调用,返回代码 为 WAIT_IO_COMPLETION。 系统可以按任何顺序调用等待完成例程。 它们可能按 I/O 函数完成的顺序调用,也可能不调用。
每次系统调用完成例程时,它都会使用应用程序的一些堆栈。 如果完成例程执行其他异步 I/O 和可警报等待,则堆栈可能会增长。
有关详细信息,请参阅 异步过程调用。
示例
有关示例代码,请参阅 使用完成例程的命名管道服务器。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | minwinbase.h (包括 Windows.h) |