GetOverlappedResult 函数 (ioapiset.h)

检索指定文件、命名管道或通信设备上重叠操作的结果。 若要指定超时间隔或等待可警报线程,请使用 GetOverlappedResultEx

语法

BOOL GetOverlappedResult(
  [in]  HANDLE       hFile,
  [in]  LPOVERLAPPED lpOverlapped,
  [out] LPDWORD      lpNumberOfBytesTransferred,
  [in]  BOOL         bWait
);

参数

[in] hFile

文件、命名管道或通信设备的句柄。 此句柄与通过调用以下任何函数启动重叠操作时指定的句柄相同:

[in] lpOverlapped

指向在启动重叠操作时指定的 OVERLAPPED 结构的指针。

[out] lpNumberOfBytesTransferred

指向变量的指针,该变量接收读取或写入操作实际传输的字节数。 对于 TransactNamedPipe 操作,这是从管道读取的字节数。 对于 DeviceIoControl 操作,这是设备驱动程序返回的输出数据的字节数。 对于 ConnectNamedPipeWaitCommEvent 操作,此值未定义。

[in] bWait

如果此参数为 TRUE,并且 lpOverlapped 结构的 Internal 成员STATUS_PENDING,则函数在操作完成之前不会返回。 如果此参数为 FALSE 且操作仍处于挂起状态,则函数返回 FALSE,GetLastError 函数返回ERROR_IO_INCOMPLETE

返回值

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

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

GetOverlappedResult 函数报告的结果是指定句柄的最后一个重叠操作的结果,其中提供了指定的 OVERLAPPED 结构,并且该操作的结果处于挂起状态。 启动操作的函数返回 FALSE,GetLastError 函数返回ERROR_IO_PENDING时,指示挂起的操作。 当 I/O 操作挂起时,启动该操作的函数会将 OVERLAPPED 结构的 hEvent 成员重置为非对齐状态。 然后,当挂起的操作完成时,系统会将事件对象设置为已发出信号的状态。

如果 bWait 参数为 TRUE则 GetOverlappedResult 将通过等待事件对象处于信号状态来确定挂起操作是否已完成。

如果 OVERLAPPED 结构的 hEvent 成员为 NULL,则系统使用 hFile 句柄的状态在操作完成时发出信号。 不建议出于此目的使用文件、命名管道或通信设备句柄。 使用事件对象更安全,因为在同一文件、命名管道或通信设备上执行多个同时重叠操作时,可能会出现混淆。 在这种情况下,无法知道哪个操作导致对象状态被发出信号。

示例

有关使用 GetOverlappedResult 的示例,请参阅 测试文件末尾

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 ioapiset.h (包括 Windows Server 2003 上的 Windows.h、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CancelIoCreateEventGetOverlappedResultExOVERLAPPED重叠输入和输出同步函数