上、下位机的交流通常要用到串口通讯,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

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



