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

阅读: 评论:0

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

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

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

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

本文的示例代码见咸鱼:

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

代码特点:

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

2.定时刷新可用串口;

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

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

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

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

 

1.使用串口类

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

 

2.新建线程

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

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

初始化线程:

开启和关闭线程:

新建子线程类:

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

 

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

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

4.错误信息提示框

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

5.定时查看串口状态

首先包含定时器类QTime。

6.程序界面

 

串口程序试用:

代码链接:=true&wx_navbar_transparent=true&id=599323286219&ut_sk=1.AAhiIP37iQwDANlHHj81FWR6_21407387_1563844255781.Copy.detail.599323286219.1030106470&forceFlush=1

 

本文发布于:2024-02-01 14:22:17,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170676853937218.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:串口   多线程   界面   QT
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23