Qt中使用线程之QRunnable

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

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

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

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

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

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

举例:

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

cpp 复制代码
#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
相关推荐
爱凤的小光21 分钟前
图漾新版看图软件操作手册(待完善版)
c++
共享家95271 小时前
数据结构-并查集
数据结构·c++·算法
AA陈超1 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-19 打开属性菜单
c++·游戏·ue5·游戏引擎·虚幻
m0_748233641 小时前
【C++篇】C++11入门:踏入C++新世界的大门
java·c++·算法
Elias不吃糖1 小时前
Qt TCP 网络通信详解(笔记)
笔记·qt·tcp/ip
m0_748233642 小时前
jank实现C++无缝互操作的技术探索
开发语言·c++
沢田纲吉2 小时前
《LLVM IR 学习手记(七):逻辑运算与位运算的实现与解析》
前端·c++·编译器
BAGAE2 小时前
HTTPS 加密原理介绍
java·c++·websocket·http·均值算法·启发式算法·最小二乘法
B站计算机毕业设计之家2 小时前
深度学习:YOLOv8人体行为动作识别检测系统 行为识别检测识系统 act-dataset数据集 pyqt5 机器学习✅
人工智能·python·深度学习·qt·yolo·机器学习·计算机视觉
半桔2 小时前
【IO多路转接】IO 多路复用之 select:从接口解析到服务器实战
linux·服务器·c++·github·php