当前位置: 首页 > article >正文

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


http://www.kler.cn/news/368634.html

相关文章:

  • 实战OpenCV之深度学习
  • 机器学习 - 概述、数据集、Scikit-learn
  • 探秘 Feign 核心注解:@FeignClient 和 @EnableFeignClients 是如何打通微服务通信的 “任督二脉” 的?
  • 华为原生鸿蒙操作系统:我国移动操作系统的新篇章
  • MySQL主主SQL线程异常修复大作战,一失足成千古恨啊!
  • vue3+vite 部署npm 包
  • C/C++ 每日一练:计算斐波那契数列的第 n 项(递归、记忆化、迭代)
  • 开源(open source)是什么?为什么要开源?
  • 【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera
  • Spreadsheet导出excel
  • 【大模型】Ollama+WebUI+AnythingLLM搭建本地知识库
  • stm32 使用J-Link RTT Viewer打印日志
  • Spring MVC的MultipartFile
  • Elasticsearch 构建实时数据可视化应用
  • 《MYSQL实战45讲》为什么使用聚合函数会导致索引失效
  • 移植rv1106SDK的ipcweb到ubuntu
  • 数据结构---链表(二)【不带头双向非循环】
  • 【C++复习】第三弹之继承和多态
  • 面向接口的方式进行CRUD
  • 排序算法(冒泡,插入),希尔排序(插入升级),希尔排序和插入排序时间比较!
  • C++:多态(用法篇)
  • webpack解决使用window.open方法打开history路由页面提示404的问题
  • linux softirq tasklet 软中断实现
  • AGI大模型面经汇总,太全了!收藏一下吧很难找全的!
  • 2-135 基于matlab的有限差分法计算电位分布
  • Linux系统设置开机自启动.py脚本(树莓派Ubuntu)