Qt : 实现串口的同步和异步读写消息

一、同步/异步

在串口通信中,同步和异步读写消息是两种常见的通信模式。下面简要介绍它们的区别和示例:

同步读写消息

  • 同步读写:在同步通信中,发送方发送数据后会等待接收方的响应,直到接收到响应后才继续执行后续操作。这种方式是阻塞的,发送和接收是一对一的,直到数据传输完成。

  • 示例:在串口通信中,同步读写消息的示例可能是发送一个数据包到串口,然后等待串口返回响应数据后再继续执行后续操作。这种方式适用于需要确保数据传输完整性和顺序性的场景。

异步读写消息

  • 异步读写:在异步通信中,发送方发送数据后不会等待接收方的响应,而是继续执行后续操作。接收方在接收到数据后会触发一个事件或回调函数来处理接收到的数据。

  • 示例:在串口通信中,异步读写消息的示例可能是发送一个数据包到串口后立即继续执行后续操作,而串口接收到数据后会触发一个信号或回调函数来处理接收到的数据。这种方式适用于需要提高系统的响应速度和并发性能的场景。

二、示例代码

以下是一个简单的示例代码,演示了如何在 Qt 中实现串口的同步和异步读写消息:

cpp 复制代码
#include <QCoreApplication>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 同步读写消息
    QSerialPort serialSync;
    serialSync.setPortName("COM1");
    serialSync.open(QIODevice::ReadWrite);
    serialSync.write("Hello, World!");
    serialSync.waitForReadyRead();
    QByteArray responseData = serialSync.readAll();
    qDebug() << "Received response synchronously:" << responseData;

    // 异步读写消息
    QSerialPort serialAsync;
    serialAsync.setPortName("COM2");
    serialAsync.open(QIODevice::ReadWrite);
    QObject::connect(&serialAsync, &QSerialPort::readyRead, [&](){
        QByteArray responseData = serialAsync.readAll();
        qDebug() << "Received response asynchronously:" << responseData;
    });
    serialAsync.write("Hello, World!");

    return a.exec();
}

这段代码演示了如何在 Qt 中实现串口的同步和异步读写消息。在同步通信中,使用 waitForReadyRead 方法等待数据的到达;在异步通信中,通过连接 readyRead 信号来处理接收到的数据。

相关推荐
maineKit3 小时前
VS Code 搭建 Qt 6 开发环境保姆级教程:CMake / qmake、MSVC / MinGW 四种组合全覆盖
qt
ai安歌5 小时前
鸿蒙PC:Qt适配OpenHarmony实战【取色间】:RGB 滑动调整、HEX 展示和颜色预览
qt·华为·harmonyos
我在人间贩卖青春7 小时前
重学Qt——数据库
qt
sycmancia7 小时前
Qt——发送自定义事件
开发语言·qt
ai安歌9 小时前
鸿蒙PC:Qt适配OpenHarmony实战【人名录】:单机联系人卡片,不读系统通讯录也能演示详情联动
数据库·qt·harmonyos
丁劲犇9 小时前
使用TraeAI开发Web页面测试MSYS2 ucrt64 Qt MCP服务器
服务器·前端·c++·qt·mcp
CodeKwang9 小时前
Qt6.5数控加工CAM框架实战:基于工厂模式与分层架构的CamCore完整实现
qt·框架·工业软件·cam
我在人间贩卖青春10 小时前
重学Qt——自定义库
qt
小燚~11 小时前
MSVCR100.dII报错问题处理
c++·windows·qt
lqj_本人11 小时前
鸿蒙PC:Qt适配OpenHarmony实战【花账】:从一笔支出开始,做一个本地记账小应用
数据库·qt·harmonyos