QT串口和多线程总结

Qt的串口个人感觉不是很好用。

大体使用步骤如下:

1.在.pro文件中加入 

QT+=serialport

2.添加头文件

#include<QtSerialPort/qserialport>
#include<QtSerialPort/QSerialPortInfo>

3.编写收发程序

write和readAll 方法实现读写程序


QT 读写可分为阻塞方式和非阻塞方式

阻塞方式:通过查询缓冲区是否有数据

waitForReadyRead(int timeout) 当缓冲区有一个字节数据的时候此函数就会返回 true;timeout为最大等待超时时间,若timeout为-1 则阻塞到有数据为止。

waitForBytesWriten(int timenout);当数据全部写完时返回1;

bytesAvailable(); 返回缓冲区已有的字节数;

使用这三个方法可实现阻塞方式读写串口;

Example:

if(Mpor->waitForReadyRead(300))

{

QByteArray readbuff;

readbuff.append(Mport->readAll());

while(Mpor->waitForReadyRead(20))

readbuff.append(Mport->readAll());

}

非阻塞式:分两种一、在子线程中读写串口;二、使用qt的信号槽机制

在子线程中读写:

QThread 类的run方法中实现读写即可;

Example:

class MyThread:public QThread

{

Qserialport *Mport;

...

public void run();

}

重写run()方法

在run方法中new Qserialport对象,初始化Mport,然后读写串口。

信号槽机制:

如果是在主线程中完成则只需要

connect(sender,signal,receiver,slot);即可; sender 和receiver 一般是本对象(this)

如果在子线程中则:

Qserialport对象必须在子线程中创建,而且最好自己手动 emit signal;

void run()

{

new Qserialport;

Init();

connect(sender,signal,receiver,slot);

Mwrite()

{

Mport->write(bytesarray);

emit msignal();

}

}


注意:

子类方法中使用connect时 需要在子类中 声明 Q_OBJECT  然后重新运行qmake(构建->执行qmake) 

写的不够完善,大体意思如此,不完善的地方有待学习.....











Qt是一种广泛使用的C++跨平台应用程序开发框架,主要用于开发GUI程序。Qt提供了串口通信的相关类和函数,同时也支持多线程开发。Qt串口通信类中,最重要的类是QSerialPort,它提供了一系列与串口通信相关的函数,包括打开串口、设置串口参数、读取数据、写入数据等。而对于多线程开发,在Qt中通常使用QThread类来创建线程。在串口通信多线程开发中,可以使用QThread类创建一个新的线程来处理串口通信,从而提高程序的并发性和稳定性。可以使用Qt的信号和槽机制来实现不同线程之间的通讯和数据传递。同时,在多线程开发中需要注意线程的同步和互斥,以避免多线程访问同一资源造成的冲突和数据损坏。 Qt串口多线程开发的源码实现需要先创建一个串口通信类,然后继承QThread类创建一个新的线程,在该线程中调用串口通信类的函数进行通讯。在实现过程中需要使用信号和槽机制来实现不同线程之间的通讯和数据传递,同时也需要考虑线程的同步和互斥问题,以避免多线程访问同一资源造成的冲突和数据损坏。 总之,Qt提供了非常完善的串口通信和多线程开发的支持,并且在实现过程中也比较简单,只需要熟悉Qt的相关类和函数即可。同时,在开发过程中也需要遵循一些基本的原则,如线程安全、代码可读性等,以确保程序的质量和可靠性。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值