gpt4 book ai didi

c++ - WaitCommEvent() 是否报告已经收到的数据?

转载 作者:行者123 更新时间:2023-11-30 02:59:02 25 4
gpt4 key购买 nike

我有一个在串行端口上执行重叠 I/O 的程序,我发现应用程序未读取已接收的数据。我的代码使用 SetCommMask()WaitCommEvent() 如下:

if(!waiting_for_comm_event)
{
comm_event_ready = false;
if(!SetCommMask(port_handle, EV_RXCHAR | EV_ERR | EV_RLSD))
throw OsException(my_strings[strid_set_comm_mask_failed].c_str());
rcd = WaitCommEvent(port_handle, &event_mask, &event_control);
last_error = GetLastError();
if(rcd && event_mask != 0)
comm_event_ready = true;
else if(last_error != ERROR_IO_PENDING)
throw OsException(my_strings[strid_wait_comm_event_failed].c_str());
else
waiting_for_comm_event = true;
}

此代码在我将任何数据写入输出缓冲区后调用。写入过程中可能会接收到数据。 WaitCommEvent() 会报告已经有数据等待读取的情况吗?

最佳答案

如果你必须在这里问,你不想知道答案。

不,真的——这意味着您依赖于未记录的行为,这些行为可能会在未来的 Windows 版本中发生变化。

您可以改为使用重叠 I/O 在发送触发它们的数据之前开始跟踪传入数据和事件。

两种方法(我在自己的串行代码中使用第一种方法的 ReadFileEx 变体):

  • 发布背景(重叠)阅读。
  • 发出背景(重叠)WaitCommEvent
  • 写入数据。
  • 等待两个后台操作...完成其中一个操作将导致 WaitForMultipleEvents 继续。

  • 发出背景(重叠)WaitCommEvent
  • 写入数据。
  • 等待后台操作。
  • 如果唤醒事件是收到数据,请阅读它。

无论哪种情况,传入的数据和错误,甚至在 WriteFile 完成之前,都会被检测到。

关于c++ - WaitCommEvent() 是否报告已经收到的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com