首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当lpNumberOfBytesTransfered返回ERROR_OPERATION_ABORTED时,GetOverlappedResult的GetLastError参数有效吗?

当lpNumberOfBytesTransfered返回ERROR_OPERATION_ABORTED时,GetOverlappedResult的GetLastError参数有效吗?
EN

Stack Overflow用户
提问于 2013-10-22 12:25:52
回答 1查看 702关注 0票数 3

在我的项目中,我需要读写串口(RS232)。我使用重叠的IO,并使用两个单独的线程进行读写。

当我发出一个没有立即完成的写操作时,我就开始等待(WaitForMultipleObjects)两个事件:分配给重叠结构的hEvent成员的事件和一个停止事件。当我想停止线程时,我通过调用SetEvent()向停止事件发出信号。这将导致等待函数返回。因为写操作仍然挂起,所以我通过调用CancelIO()来取消操作。然后,我再次等待操作完成,现在使用GetOverlappedResult(),将bWait参数设置为True。操作完成后,GetOverlappedResult()返回False,GetLastError()返回ERROR_OPERATION_ABORTED。

现在我的问题是:

当GetOverlappedResult()返回False,而GetLastError()返回ERROR_OPERATION_ABORTED (指示已完成但已取消的操作)时,lpNumberOfBytesTransfered参数有效吗?换句话说,在取消之前,lpNumberOfBytesTransfered是否给出了实际的书面字节数?还是在本例中未定义lpNumberOfBytesTransfered参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 13:34:19

我将重复汉斯·帕桑特的评论,因为我认为他对我的问题给出了一个准确的答案:

这是驱动程序实现细节。有很多可能的串口驱动程序,它们经常被一个USB或BlueTooth设备驱动程序模拟。质量常有问题的。微软的标准驱动程序已经拒绝了,当IRP被取消时,它会将IRP.IOStatus.Information字段强制为0。如果无法承受数据丢失,请不要取消I/O。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19517842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档