GetOverlappedResult函数详细解答

GetOverlappedResult
GetOverlappedResult函数返回指定文件、指定管道或通信设备上重叠操作的结果。

Windows95:此功能只适用于通讯设备或使用DeviceIoControl功能打开的档案。

BOOL GetOverlappedResult (
HANDLE hFile、//文件、管道或通信设备的句柄
lpoverllapped, //指向重叠结构的指针
LPDWORD lpNumberOfBytesTransferred, //指向实际字节数的指针
BOOL bWait //等待标志
);

参数
hFile
文件、命名管道或通信设备的句柄。这与调用ReadFile、WriteFile、ConnectNamedPipe、TransactNamedPipe、DeviceIoControl或WaitCommEvent函数启动重叠操作时指定的句柄相同。
lpOverlapped
指向在开始重叠操作时指定的重叠结构的指针。
lpNumberOfBytesTransferred
指向32位变量的指针,该变量接收由读或写操作实际传输的字节数。对于TransactNamedPipe操作,这是从管道中读取的字节数。对于DeviceIoControl操作,这是设备驱动程序返回的输出数据字节数。对于ConnectNamedPipe或WaitCommEvent操作,这个值是未定义的。
bWait
指定函数是否应该等待挂起的重叠操作完成。如果为真,则在操作完成之前函数不会返回。如果为FALSE且操作仍然挂起,则函数返回FALSE,而GetLastError函数返回ERROR_IO_INCOMPLETE。
返回值
如果函数成功,则返回值为非零。

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

讲话
GetOverlappedResult函数报告的结果是指定句柄的最后一个重叠操作的结果,该操作提供了指定的重叠结构,并且该操作的结果正在等待处理。当启动该操作的函数返回FALSE,并且GetLastError函数返回ERROR_IO_PENDING时,将指示该操作。当I/O操作处于挂起状态时,启动该操作的函数将重叠结构的hEvent成员重置为无信号状态。然后,当挂起操作完成时,系统将事件对象设置为有信号状态。

在重叠结构中指定手动重置事件对象。如果使用自动重置事件对象,则在启动重叠操作和调用GetOverlappedResult之间的任何其他等待操作中都不能指定事件句柄。例如,事件对象有时在某个等待函数中指定,以等待操作完成。当等待函数返回时,系统将自动重置事件的状态设置为无信号状态,随后调用GetOverlappedResult,并将bWait参数设置为TRUE,这将导致函数被无限期阻塞。

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

Windows 95和Windows 98:如果bWait为真,则重叠结构的hEvent成员不能为空。

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

QuickInfo
windowsnt:需要3.1或更高版本。
Windows:需要Windows 95或更高版本。
Windows CE:不支持的。
Header:在winbase.h中声明。
导入库:使用kernel32.lib。

另请参阅
同步概述,同步函数,CancelIo, ConnectNamedPipe, CreateEvent, DeviceIoControl, GetLastError, OVERLAPPED, ReadFile, TransactNamedPipe, WaitCommEvent, WriteFile

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网小镇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值