在我的项目中,我需要读取和写入串行端口(RS232)。我正在使用重叠 IO 并使用两个单独的线程进行读写。
当我发出没有立即完成的写操作时,我开始等待 (WaitForMultipleObjects) 两个事件;分配给重叠结构的 hEvent 成员的事件,以及一个停止事件。当我想停止线程时,我通过调用 SetEvent() 发出停止事件信号。这会导致等待函数返回。因为写操作仍在等待中,所以我通过调用 CancelIO() 来取消操作。然后,我再次等待操作完成,现在使用 GetOverlappedResult() 并将 bWait 参数设置为 True。操作完成后,GetOverlappedResult() 返回 False,GetLastError() 返回 ERROR_OPERATION_ABORTED。
现在这是我的问题:
当 GetOverlappedResult() 返回 False,GetLastError() 返回 ERROR_OPERATION_ABORTED(表示操作已完成但已取消)时,lpNumberOfBytesTransfered 参数是否有效?换句话说,lpNumberOfBytesTransfered 是否在取消之前给了我实际的写入字节数?还是在这种情况下未定义 lpNumberOfBytesTransfered 参数?