您当前的位置: 首页 >  qt

lw只吃亿点.

暂无认证

  • 12浏览

    0关注

    47博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QRunnable线程、QThreadPool(线程池)的使用(含源码+注释)

lw只吃亿点. 发布时间:2022-03-20 23:52:39 ,浏览量:12

文章目录
  • 一、QRunnable线程、QThreadPool使用示例图
  • 二、QRunnable和QThreadPool(个人理解)
    • 2.1 QRunnable
    • 2.2 QThreadPool(线程池)
  • 三、源码
    • 3.1 CRunnable定义类
    • 3.2 CMainWindow调用类
  • 总结
  • 相关文章

一、QRunnable线程、QThreadPool使用示例图

下图为线程池+QRunnable线程的运行示例图;在运行时,当正在运行的线程数到达限定时,后面添加的线程将暂存,当运行的线程运行完成时,或者改变最大线程数,暂存的线程才会启动,源码在本文第三节(源码含详细注释)。 在这里插入图片描述

二、QRunnable和QThreadPool(个人理解) 2.1 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()             
关注
打赏
1654352885
查看更多评论
0.0897s