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_OBJECTpublic: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