需求:有多个串口进行数据的处理,最好需要把线程封装到串口类(serialPort)中
这样就可以在主线程中通过new多个serialport对象myPort1、myPort2等来创建多个线程管理各个串口
实现方式:继承QObject的方式来写线程, 所有东西都需要用信号和槽来进行交互!!!
思路:
主线程中需要的操作:通过控制一个按钮来操作一个串口的关闭,即控制一个线程的关闭
串口类中需要的操作:
1、不想把new QThread和myPort1->moveToThread等操作,放到主线程初始化函数中,这样程序会臃肿
所以应把上述操作放到串口类serialPort初始化中,这就需要在主程序的初始化中new一个serialport对象myPort
此时串口类serialPort初始化线程和主线程是同一个线程id
注意:那可以把new一个serialport对象myPort这个过程放到按钮下面吗?
据大神说是不行的,逻辑有问题的,我在这里始终没有想明白。
我的想法(还没有进行验证):这样做后果是每次点击打开串口按钮都会new一个内存,但是可以再关闭掉。
2、如何开始线程,UI中开始按钮发送信号,serialport类中槽函数1-SLot_StartThread()响应这个信号,
serialport中槽函数1就是thread->start()操作来开始线程,此时这个槽函数1的线程id和主线程相同
再将thread->start()连接一个槽函数2-Slot_OpenComPort,槽函数2进行串口的初始化和打开串口,
打开串口后利用串口的readyRead()信号连接一个槽函数3-Slot_ReadSerialPortData()
此时槽函数2和槽函数3的线程号相同,但是和主线程线程id不同,开始了一个新的线程
注意:我自己在串口的多次打开和关闭试验得知,串口打开后将只需要connect一次readyRead()信号和槽函数
Qt中利用多线程读取串口数据
最新推荐文章于 2024-08-22 09:45:00 发布
本文介绍在Qt中如何利用多线程处理串口通信,通过继承QObject创建线程,使用信号和槽进行交互。文章讨论了线程启动、串口操作以及线程关闭的问题,强调了理解connect机制的重要性,并给出了部分代码示例。
摘要由CSDN通过智能技术生成