文章目录
一、QRunnable线程、QThreadPool使用示例图
- 一、QRunnable线程、QThreadPool使用示例图
- 二、QRunnable和QThreadPool(个人理解)
- 2.1 QRunnable
- 2.2 QThreadPool(线程池)
- 三、源码
- 3.1 CRunnable定义类
- 3.2 CMainWindow调用类
- 总结
- 相关文章
下图为线程池+QRunnable线程的运行示例图;在运行时,当正在运行的线程数到达限定时,后面添加的线程将暂存,当运行的线程运行完成时,或者改变最大线程数,暂存的线程才会启动,源码在本文第三节(源码含详细注释)。
使用QRunnable和继承QThread实现的使用方法类似,自定义类继承QRunnable(但是该类不能使用信号槽通信了),并且定必须实现run函数(要做的事情都写在里面)。
2.2 QThreadPool(线程池)该类是用于继承QRunnable类线程的使用,并且线程池还会对其接收的线程进行管理,如启动,释放等;并且在创建线程池后最好设置线程池最大线程容量,方便管理。
三、源码 3.1 CRunnable定义类CRunnable.h
#ifndef CRUNNABLE_H
#define CRUNNABLE_H
#include
#include
class CRunnable : public QRunnable
{
public:
explicit CRunnable();
void run();
private:
static int m_sCount; //定义一个计数值,当新线程创建时就自加(姑且称为线程count)
int m_number; //定义一个分辨值,存储当前线程创建时的m_sCount值(姑且称为线程num)
};
#endif // CRUNNABLE_H
CRunnable.cpp
#include "CRunnable.h"
#include
#include
int CRunnable::m_sCount = 0;
CRunnable::CRunnable()
{
m_number = ++m_sCount; //创建时将计数值加一,并将其赋给分辨值
}
void CRunnable::run()
{
//循环5次
for(int index = 0; index != 5; ++index)
{
//输出当前线程的num、线程静态变量count以及线程id
qDebug() start(new CRunnable);
//输出线程激活数
qDebug()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?