LPOVERLAPPED_COMPLETION_ROUTINE回调函数 (minwinbase.h)

ReadFileExWriteFileEx 函数一起使用的应用程序定义的回调函数。 当异步输入和输出 (I/O) 操作完成或取消,并且调用线程处于可警报状态 (时,将使用 SleepExMsgWaitForMultipleObjectsEx、WaitForSingleObjectExWaitForMultipleObjectsEx 函数) 设置为 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)

另请参阅

BindIoCompletionCallback

文件管理函数

OVERLAPPED

ReadFileEx

SleepEx

同步和异步 I/O

WaitForMultipleObjectsEx

WaitForSingleObjectEx

WriteFileEx