QT增加线程函数步骤流程

在使用线程的时候,不仅要关注线程开启的时机,同时还要关注线程安全退出,这样才能保证程序的健壮性,如果线程开启的较多,且开启关闭比较频繁,建议使用线程池来处理。开启线程有三种方式:第一种C++的开线程方式;第二种自定义一个继承自QObject的类,把要处理的事情放在这个类中实现,然后再new一个QThread指定,把这个类通过moveToThread移动到指定的线程中进行处理;第三种也就是我们这里重点分析的一种,自定义一个类,继承自QThread,然后重写run函数,把要处理的事项放在run函数中。

1,新建一个C++类,并继承自QThread

2,输入线程类的名称,并勾选图中所示内容,点击下一步,点击完成即可

 3,在添加的线程类中,.h文件中添加run函数,用于重写

4,在线程类的cpp文件中,在run()中添加要处理的逻辑业务

5,子线程只能处理数据,不能直接在子线程操作界面(否则会崩溃),如果想要操作界面,需要将子线程的数据传递给界面主线程进行操作,这样就用到了我们信号和槽,子线程和主线程之间传递参数。子线程和主线程之间传递数据: 

(1)首先,在主界面的头文件中,添加线程对象:

#include"usbthread.h"和usbThread myusbThread;

(2) 在主界面的cpp文件中,添加信号和槽连接(这里用到自定义信号),在子线程的头文件中定义你要传递的数据,这里使用的自定义结构体信号stru_usb_data,参数是结构体形式。

signals:void send_usbFlagSignal(stru_usb_data usb_data);

(3) 在界面主线程中的构造函数中开启线程,也可以根据自己的需要开启线程(比如,点击按钮时开启,或者接收到信号触发时开启,这个根据用户自己的需求来定);并且 在子线程的cpp文件中通过emit函数发送该信号

(4)  在子线程的cpp文件中通过emit函数发送该信号

(5) 在主界面cpp文件中连接信号和槽,用于接收子线程传递过来的数据,这里的信号是自定义的信号,参数是非基本类型,所以需要对信号进行注册。于是就实现了一个界面主线程,一个数据处理线程,子线程提供数据,通过信号和槽传递给界面主线程,界面主线程对接收到的数据进行处理。

6,线程运行完毕,需要安全退出(线程异常退出有可能导致崩溃),这里安全退出有两种方式,一种是标志位,一种是通过检查线程运行状态,通过quit,wait来实现,这里我们用第二种方式退出线程。

相关推荐

  1. Qt 线

    2024-03-21 00:34:02       14 阅读
  2. QT 线的启动

    2024-03-21 00:34:02       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 00:34:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 00:34:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 00:34:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 00:34:02       20 阅读

热门阅读

  1. FPGA与以太网相关接口知识

    2024-03-21 00:34:02       19 阅读
  2. .net core 接入nacos

    2024-03-21 00:34:02       24 阅读
  3. 力扣-3. 无重复字符的最长子串

    2024-03-21 00:34:02       19 阅读
  4. 智慧能源-数字化能源转型革命

    2024-03-21 00:34:02       19 阅读
  5. tcp拥塞控制详解

    2024-03-21 00:34:02       20 阅读
  6. C语言学习笔记day10

    2024-03-21 00:34:02       16 阅读
  7. 在AI中无所不在的微积分

    2024-03-21 00:34:02       20 阅读
  8. 如何防御XSS攻击

    2024-03-21 00:34:02       21 阅读
  9. LeetCode1492. The kth Factor of n

    2024-03-21 00:34:02       21 阅读
  10. 如何在 Flutter 中实现地理定位和地图功能?

    2024-03-21 00:34:02       22 阅读
  11. Linux命令-dhclient命令(动态获取或释放IP地址)

    2024-03-21 00:34:02       19 阅读
  12. 一篇文章搞懂vue基础(上)

    2024-03-21 00:34:02       20 阅读
  13. stm32F407+ESP8266+AT指令+阿里云+代码进阶版(4)

    2024-03-21 00:34:02       18 阅读