[movetothread]linux串口多线程编程,单例模式

上、下位机的交流通常要用到串口通讯,qt针对串口通讯有自己的库:QSerialPort,这个很方便。我利用QSerialPort库将串口的初始化、发送和接收函数写在一个串口类中,因为数据的交流比较频繁,数据量也不小就需要用到多线程,就将串口类继承于QObject,使用movetothread方法将发送接收这些槽函数运行在子线程中。在这个串口类中,我用了单例模式(虽然重复打开串口没什么影响),遇到了关闭线程后又重新打开后程序闪退的问题,debug之后发现单例模式的类指针deleteLater后仍然存在,但是打印不出来,查阅资料才清楚delete指针后,需要赋值nullptr,原因是delete删除后只是释放内存,但是指针还存在并且成为了野指针,此时对指针进行任何操作都很危险,不过这确实是很基础的问题(ε=(´ο`*)))唉)。

下面分享一下我仿写串口通讯范例的代码(尽量把代码中的NULL都改成nullptr,具体原因可以搜索一下)

一、串口类

1.1.myserialport.h

#include <QObject>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
#include <QMutex>
#include <QMutexLocker>
#include <QThread>
class MySerialPort: public QObject
{
    Q_OBJECT
public:
    static MySerialPort* GetInstance();//单例模式

    ~MySerialPort();

    void Init();//初始化

    void CloseSeri
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值