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

晶壁旅行者
  • 308

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

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

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

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

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

回复
阅读 82
1 个回答

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

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

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

宣传栏