GetOverlappedResult 函数 (ioapiset.h)
检索指定文件、命名管道或通信设备上重叠操作的结果。 若要指定超时间隔或等待可警报线程,请使用 GetOverlappedResultEx。
语法
BOOL GetOverlappedResult(
[in] HANDLE hFile,
[in] LPOVERLAPPED lpOverlapped,
[out] LPDWORD lpNumberOfBytesTransferred,
[in] BOOL bWait
);
参数
[in] hFile
文件、命名管道或通信设备的句柄。 此句柄与通过调用以下任何函数启动重叠操作时指定的句柄相同:
- ReadFile
- WriteFile
- ConnectNamedPipe
- TransactNamedPipe
- DeviceIoControl
- WaitCommEvent
- ReadDirectoryChangesW
- LockFileEx
[in] lpOverlapped
指向在启动重叠操作时指定的 OVERLAPPED 结构的指针。
[out] lpNumberOfBytesTransferred
指向变量的指针,该变量接收读取或写入操作实际传输的字节数。 对于 TransactNamedPipe 操作,这是从管道读取的字节数。 对于 DeviceIoControl 操作,这是设备驱动程序返回的输出数据的字节数。 对于 ConnectNamedPipe 或 WaitCommEvent 操作,此值未定义。
[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 |
另请参阅
CancelIo、 CreateEvent、 GetOverlappedResultEx、 OVERLAPPED、 重叠输入和输出、 同步函数