Qt中利用多线程读取串口数据

本文介绍在Qt中如何利用多线程处理串口通信,通过继承QObject创建线程,使用信号和槽进行交互。文章讨论了线程启动、串口操作以及线程关闭的问题,强调了理解connect机制的重要性,并给出了部分代码示例。
摘要由CSDN通过智能技术生成

需求:有多个串口进行数据的处理,最好需要把线程封装到串口类(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()信号和槽函数           

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值