QT 防止界面卡死(多线程串口使用)

串口的使用基本是所有嵌入式开发中用得最多,使用最为普遍的。QT编写window界面程序非常便利,利用QT完成串口的控制,具有非常高的价值。而网上常见的串口是直接在主线程中接收数据,虽然也能使用。但若接收的数据量过大,且数据处理非常复杂,则会卡死界面线程使得无法响应鼠标和键盘事件,这是不允许的。因此本文通过多线程的方式接收串口的数据,可以有效防止界面的卡死。

前言:使用串口有多种方式:第一种,开闭串口和接收数据都在主界面线程中进行,数据量小还可以,数据量一大直接卡死;第二种,开闭串口和接收数据都在子线程中进行,主界面不会卡死,数据也能正常接收,但是线程中串口类不安全;第三种,开闭串口在主线程中进行,接受数据和解析数据在子线程中进行。本文也是这种方式。

本文的示例代码见咸鱼:

本文项目代码运行环境如下,代码界面和源代码链接在末尾:

代码特点:

1.使用多线程技术,串口在主线程开闭,在子线程中接收数据;

2.定时刷新可用串口;

3.定时检测选中的当前串口状态,通过指示灯指示状态(绿色开启,红色关闭);

4.默认数据流控制无,也可修改;

5.串口打开错误会提醒;

6.通过全局变量共享线程间数据;

 

1.使用串口类

QT自带串口类,因此使用非常简单。只需在pro文件中添加串口库,在使用前包含串口类。

 

2.新建线程

同样,QT也有线程类。使用时包含线程类库。
头文件:
#include <QThread>

主界面头文件中包含线程对象。

初始化线程:

开启和关闭线程:

新建子线程类:

防止子线程运算事件过长导致无法响应主界面鼠标点击等事件:

 

3.串口指针传入子线程中

打开和关闭串口操作在主界面线程中,根据前面串口操作的讲解就能完成。但若要子线程中完成串口数据的接收,需要将串口类指针传入子线程,这里使用信号与槽机制完成,亲测可用,如有更好的方法,请留言给我!

4.错误信息提示框

包含QMessageBox的头文件,和Qpushbutton的头文件。

5.定时查看串口状态

首先包含定时器类QTime。

6.程序界面

 

串口程序试用:

代码链接:https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=599323286219&ut_sk=1.AAhiIP37iQwDANlHHj81FWR6_21407387_1563844255781.Copy.detail.599323286219.1030106470&forceFlush=1

 

  • 10
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kissgoodbye2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值