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 信号来处理接收到的数据。

相关推荐
mkhase9 分钟前
9.12-QT-基本登陆界面实现
java·jvm·qt
咕噜咕噜啦啦30 分钟前
Qt之快捷键、事件处理、自定义按键——完成记事本项目
开发语言·qt
Quz1 小时前
QML Charts组件之折线图的鼠标交互
qt
眠りたいです4 小时前
基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作
c++·qt·ui·微服务·云原生·架构·媒体
bikong75 小时前
Qt/C++,windows多进程demo
c++·windows·qt
油炸自行车7 小时前
【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio)
qt·visual studio·qt6·msvc2022·qt creator 17.0
枫叶丹48 小时前
【Qt开发】显示类控件(三)-> QProgressBar
开发语言·qt
姓刘的哦16 小时前
Qt中的QWebEngineView
数据库·c++·qt
SundayBear17 小时前
QT零基础入门教程
c++·qt
qq_401700411 天前
QT子线程与GUI线程安全交互
开发语言·qt