Qt中使用线程之QRunnable

1、自定义1个子类继承自QRunnable

2、重写run方法,编写子线程的业务逻辑

3、使用QThreadPool的全局方法来开启这个线程

4、线程的回收不需要关注,由QThreadPool处理

5、缺点:无法使用信号槽机制

6、适合一些不需要和主线程通信的耗时的任务

举例:

窗口创建时开启1个耗时任务,打印ui线程和任务线程的id,任务线程被销毁时,打印日志

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QRunnable>
#include<QThread>
#include<QThreadPool>

//继承自QRunnable
class MyThread:public QRunnable
{
public:
    MyThread()=default;
    ~MyThread()
    {
        qDebug()<<"我被销毁了";
    }

    //提供退出方法
    void Stop()
    {
        stop=true;
    }

protected:
    //重写run方法
    void run() override
    {
        qDebug()<<"子线程id:"<<QThread::currentThreadId();
        int num=0;
        while(!stop)
        {
            //num自增,然后循环打印
            qDebug()<<num++;
            QThread::msleep(1000);
        }
    }
private:
    bool stop=false;

};



class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr) : QWidget(parent)
    {
        qDebug()<<"UI线程iD:"<<QThread::currentThreadId();

        //创建任务
        th=new MyThread;
        //使用QThreadPool的全局实例来启动任务
        QThreadPool::globalInstance()->start(th);
        //子线程的释放不需要我们来管了
    }
    ~Widget(){
        //窗口销毁时,停止掉子线程的耗时任务
        th->Stop();
    };
private:
    MyThread* th;
};
#endif // WIDGET_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 加载 class 文件的原理机制

JVM 加载 class 文件的原理机制 JVM&#xff08;Java虚拟机&#xff09;是一个可以执行Java字节码的虚拟机。它负责执行Java应用程序和应用程序的扩展&#xff0c;如Java库和框架。 文章目录 JVM 加载 class 文件的原理机制1. JVM1.1 类加载器1.2 魔数1.3 元空间 2. 类加载2.1 …

一篇文章快速认识 YOLO11 | 目标检测 | 模型训练 | 自定义数据集

本文分享YOLO11的目标检测&#xff0c;主要内容是自定义数据集、数据标注、标签格式转换、模型训练、模型推理等。 目录 1、数据标注 2、Labelme的json转为YOLO的txt 3、配置YOLO11代码工程 4、数据集yaml配置文件 5、YOLO11模型结构配置文件 6、编写训练代码 7、开始训…

基于neo4j旅游领域智能问答与图片展示系统

如果你正在苦恼选什么项目做毕业设计&#xff0c;或者对旅游、人工智能、数据可视化感兴趣&#xff0c;那么千万别错过这款基于Neo4j的互联网智能问答与旅游图片展示系统&#xff01;&#x1f60e;它不仅实用&#xff0c;还拥有丰富的数据资源&#xff0c;技术亮点也是满满的。…

【数据结构】快速排序(三种实现方式)

目录 一、基本思想 二、动图演示&#xff08;hoare版&#xff09; 三、思路分析&#xff08;图文&#xff09; 四、代码实现&#xff08;hoare版&#xff09; 五、易错提醒 六、相遇场景分析 6.1 ❥ 相遇位置一定比key要小的原因 6.2 ❥ 右边为key&#xff0c;左边先走 …

简单的windows java -jar 无法启动jar包解决方法

简单的windows java -jar 无法启动jar包解决方法 1. 问题 我们项目是使用nacos作为注册中心以及配置中心&#xff0c;我们本地使用idea 进行服务配置以及启动发现没有问题&#xff0c;然后我们的服务经过maven install 打包后发布到LINUX服务启动也没有问题&#xff0c;但是我…

三种单例实现

1、不继承Mono的单例 实现 使用 注&#xff1a; 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注&#xff1a; 使用需要继承SingletonMono 泛型填写自己本身 需要挂载在unity引擎面板 3、不用挂载式的单例 实现 使…

Matlab学习01-矩阵

目录 一&#xff0c;矩阵的创建 1&#xff0c;直接输入法创建矩阵 2&#xff0c;利用M文件创建矩阵 3&#xff0c;利用其它文本编辑器创建矩阵 二&#xff0c;矩阵的拼接 1&#xff0c;基本拼接 1&#xff09; 水平方向的拼接 2&#xff09;垂直方向的拼接 3&#xf…

无人机之自主降落系统篇

一、定义与功能 无人机自主降落系统是指无人机在无需人工干预的情况下&#xff0c;按照预先设定好的程序或基于实时感知的环境信息&#xff0c;自主完成降落过程的技术系统。该系统能够确保无人机在完成任务后安全、准确地降落到指定位置。 二、系统组成 无人机自主降落系统主…

C#中的LINQ之美:优雅的数据查询与操作

LINQ&#xff08;Language Integrated Query&#xff0c;语言集成查询&#xff09;是C#中一个强大的工具&#xff0c;它将查询功能直接融入到语言中&#xff0c;使开发者能够以一种更直观、更接近自然语言的方式来操作数据。LINQ不仅能极大地提高开发效率&#xff0c;而且让代码…

一款好用的搜索软件——everthing(搜索比文件资源管理器快)

everthing官网链接 在官网选择下载 1.下载后双击打开 2.点击OK&#xff08;需要其他语言自己选择&#xff09; 3.选择安装位置&#xff08;路径最好别带中文和空格&#xff09; 继续点击下一步 4. 点击下一步 5.继续点击安装 6.然后就完成了 7.点击打开然后就可以搜索了

论文速读:基于 YOLO 目标检测的无源域自适应(ECCV2024)

原文标题&#xff1a;Source-Free Domain Adaptation for YOLO Object Detection 中文标题&#xff1a;基于 YOLO 目标检测的无源域自适应 论文地址&#xff1a; https://arxiv.org/abs/2409.16538 代码地址&#xff1a; https://github.com/vs-cv/sf-yolo 1、Abstract 无源域自…

接口测试 —— Postman 变量了解一下!

Postman变量是在Postman工具中使用的一种特殊功能&#xff0c;用于存储和管理动态数据。它们可以用于在请求的不同部分、环境或集合之间共享和重复使用值。 Postman变量有以下几种类型&#xff1a; 1、环境变量&#xff08;Environment Variables&#xff09;: 环境变量是在…

kubernetes中的微服务详解

华子目录 什么是微服务微服务的类型ipvs模式ipvs模式配置方式注意 微服务类型详解ClusterIP类型Services创建后集群DNS提供解析ClusterIP中的特殊模式&#xff1a;headless无头服务 NodePort类型访问过程NodePort默认端口 LoadBalancer类型访问过程metalLBmetalLB功能部署metal…

百度搜索推广和信息流推广的区别,分别适用于什么场景!

信息流推广和搜索广告&#xff0c;不仅仅是百度&#xff0c;是很多平台的两个核心推广方式。 1、搜索广告&#xff1a; 就是基于用户的搜索习惯&#xff0c;更多是用户有疑问、还有用户当下就要做出行动的广告。 比如上门服务、线上咨询服务、招商加盟、了解产品各种型号和信…

[JAVA]JDBC如何实现写数据?——利用Java新增MySQL中存储的员工字段信息

我们在实现JDBC写数据之前需要先工具类做一些前置准备。—封装DbUtils工具类&#xff0c;是一个用于操作数据库的工具类&#xff0c;它提供了一些便捷的方式来执行SQL语句&#xff0c;获取数据库连接等。简化程序的开发。DbUtils工具类主要帮我们封装&#xff0c;打开连接&…

LabVIEW提高开发效率技巧----插入式架构

随着LabVIEW项目规模的扩大和系统复杂性的增加&#xff0c;传统的单一代码架构难以应对后期维护和功能扩展的需求。插入式架构&#xff08;Plug-In Architecture&#xff09;作为一种模块化设计方式&#xff0c;通过动态加载和运行子VI&#xff0c;使系统功能更加灵活、模块化&…

【LLM之Agent】《Tool Learning with Large Language Models: A Survey》论文阅读笔记

概述 背景信息 近年来&#xff0c;基于大型语言模型&#xff08;LLMs&#xff09;的工具学习成为增强LLMs应对复杂任务能力的有力范式。尽管这一领域快速发展&#xff0c;现有文献的碎片化以及缺乏系统组织&#xff0c;给新入门者带来了阻碍。因此&#xff0c;本论文旨在对现…

Chrome DevTools 二: Performance 性能面板

Chrome DevTools 第二篇 Performance 主要介绍performance在我们日常开发中所起到的作用&#xff0c;以及如何利用performance 面板进行性能分析和相关优化建议。 性能面板 Performance 记录和分析页面运行中的所有活动&#xff0c;是解决前端性能问题的重要工具。 1. 控制栏…

分布式链路追踪-01初步认识SkyWalking

一 SkyWaling是什么&#xff1f; Skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布式追踪、服务网格遥…

idea 无法输入中文 快速解决

idea在某些情况会出现无法输入中文的情况&#xff0c;我们不去深究内部原因&#xff0c;直接上解决方案&#xff1a; 1、点击菜单help->Edit Custom VM Options 2、最后一行&#xff0c;追加&#xff1a; -Drecreate.x11.input.methodtrue 、 3、重启