qt 多线程的串口通讯 如何在收到反馈帧后,再发送下一帧内容?

发布于 2022-09-12 23:30:15 字数 405 浏览 43 评论 0

在qt中用多线程的方式实现了一个串口的简单收发程序.
单独的收与发,测试都没什么问题.

通过信号槽的方式将要发送的多条帧,连接到串口线程的发送,可以实现连续的发送操作.

但是如果希望在发送一次得到反馈帧后,再发送一下帧的内容该如何实现?

// 发送数据给下位机
void SerialObj::sendData(QString sendData)
{
    //while(send_flag == false);
    send_flag = false;
    // 发送数据帧
    m_serialPort->write(sendData.toUtf8());
}

原先以为能在串口线程内,发送用send_flag 标记位堵塞,接收到需要的帧后解锁.实际情况只是单纯的卡死在while.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒中人 2022-09-19 23:30:15

C++ 和 QT 都 10 年没用了,不熟,给个思路。

  1. 要把可以并发的发送操作改成阻塞式的,加标记没毛病。但是应该再加个超时设置,毕竟不知道是不是能等到回应。
  2. 如果要在循环中进行阻塞处理,一般应该加 sleep 时间,不然 CPU 资源很容易耗尽
  3. sendData 如果会在一次处理周期(发送并等待响应)中被调用多次,应该加队列进行排序处理。

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文