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
相关推荐
45288655上山打老虎2 分钟前
【智能指针】
开发语言·c++·算法
水饺编程15 分钟前
第3章,[标签 Win32] :WM_CREATE 消息的产生
c语言·c++·windows·visual studio
草莓熊Lotso28 分钟前
《算法闯关指南:优选算法--前缀和》--31.连续数组,32.矩阵区域和
c++·线性代数·算法·矩阵
程序喵大人29 分钟前
CMake入门教程
开发语言·c++·cmake·cmake入门
csuzhucong30 分钟前
斜转魔方、斜转扭曲魔方
前端·c++·算法
我不会插花弄玉30 分钟前
类与对象-上【由浅入深-C++】
c++
郝学胜-神的一滴34 分钟前
Horse3D游戏引擎研发笔记(十):在QtOpenGL环境下,视图矩阵与投影矩阵(摄像机)带你正式进入三维世界
c++·3d·unity·游戏引擎·godot·图形渲染·unreal engine
LNN20221 小时前
Qt 5.8.0 下实现触摸屏热插拔功能的探索与实践(2)
开发语言·qt
-森屿安年-1 小时前
二叉平衡树的实现
开发语言·数据结构·c++
Q741_1472 小时前
C++ 高精度计算的讲解 模拟 力扣67.二进制求和 题解 每日一题
c++·算法·leetcode·高精度·模拟