Qt工作笔记-线程池作用之一:限制系统中执行线程的数量

article/2025/9/28 23:27:08

一、线程池的作用:
线程池作用就是限制系统中执行线程的数量。
根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列。
二、为什么要用线程池:
1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。

 

程序运行截图如下:

 

代码如下:

mytask.h

#ifndef MYTASK_H
#define MYTASK_H#include <QRunnable>
class QListWidget;class MyTask : public QRunnable
{
public:MyTask(QListWidget *listWidget);~MyTask();int Create();void Destroy();private:void run();QListWidget *m_listWidget;
};#endif // MYTASK_H

 

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class MyTask;
class QThreadPool;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void btnClicked();private:Ui::Widget *ui;MyTask *m_myTask[5];QThreadPool *m_pThreadPool;
};#endif // WIDGET_H

 

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

 

mytask.cpp

#include "mytask.h"
#include <QDebug>
#include <QTime>
#include <QThread>
#include <QListWidget>
#include <QListWidgetItem>MyTask::MyTask(QListWidget *listWidget)
{m_listWidget=listWidget;QListWidgetItem *item=new QListWidgetItem;item->setTextColor(Qt::green);item->setText("MyTask created: this is 0x"+QString::number((unsigned int)this,16));m_listWidget->insertItem(0,item);
}MyTask::~MyTask()
{QListWidgetItem *item=new QListWidgetItem;item->setTextColor(Qt::red);item->setText("MyTask::~MyTask() called! this address is 0x"+QString::number((unsigned int)this,16));m_listWidget->insertItem(0,item);
}void MyTask::run()
{QListWidgetItem *item1=new QListWidgetItem;item1->setText("threadID:"+QString::number((unsigned int)QThread::currentThreadId(),16)+"    this:"+QString::number((unsigned int)this,16));m_listWidget->insertItem(0,item1);for(int i=0;i<10;i++){QListWidgetItem *item=new QListWidgetItem;item->setText("threadID:"+QString::number((unsigned int)QThread::currentThreadId())+" i:"+QString::number(i));m_listWidget->insertItem(0,item);qDebug()<<"threadID:"<<QThread::currentThreadId()<<" i:"<<i<<" time:"<<QTime::currentTime().toString("HH:mm:ss");QThread::sleep(1);}
}

 

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "mytask.h"
#include <QThreadPool>
#include <QListWidgetItem>
#include <QTime>
#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);for(int i=0;i<5;i++){m_myTask[i]=new MyTask(ui->listWidget);}connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));
}Widget::~Widget()
{delete ui;
}void Widget::btnClicked()
{m_pThreadPool=QThreadPool::globalInstance();if(m_pThreadPool){m_pThreadPool->setMaxThreadCount(3);m_pThreadPool->setExpiryTimeout(-1);for(int i=0;i<5;i++){m_pThreadPool->start(m_myTask[i]);}m_pThreadPool->waitForDone();QListWidgetItem *item1=new QListWidgetItem;item1->setTextColor(Qt::blue);item1->setText("m_pThreadPool->waitForDone()   time:"+QTime::currentTime().toString("HH:mm:ss"));ui->listWidget->insertItem(0,item1);m_pThreadPool->clear();QListWidgetItem *item2=new QListWidgetItem;item2->setTextColor(Qt::red);item2->setText("m_pThreadPool->clear()   time:"+QTime::currentTime().toString("HH:mm:ss"));}
}

 


http://chatgpt.dhexx.cn/article/lBAukIAJ.shtml

相关文章

Android:Android线程和线程池的作用

文章目录 前言一、线程池概念好处线程池的创建参数含义工作机制RejectedExecutionHandler&#xff08;饱和策略&#xff09; 二、Android线程形态1.AsyncTask特点作用缺点生命周期注意事项 具体使用源码分析小结 2.HandlerThread特点作用具体使用 3.IntentService源码分析 总结…

线程池作用和参数原理

线程池的作用 减少资源的开销 减少了每次创建线程、销毁线程的开销。 提高响应速度每次请求到来时&#xff0c;由于线程的创建已经完成&#xff0c;故可以直接执行任务&#xff0c;因此提高了响应速度。提高线程的可管理性 线程是一种稀缺资源&#xff0c;若不加以限制&#x…

线程池作用、用法以及原理

线程池 作用用法建议设定大小快捷构造线程池submit与executeshutdown与shutdownNowFuture与FutureTast代码 状态底层原理继承关系主要参数工作原理饱和策略连接复用 作用 1&#xff0c;降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗 2&#xff0c;提高…

线程池-线程池的好处

1.线程池的好处。 线程使应用能够更加充分合理的协调利用cpu 、内存、网络、i/o等系统资源。 线程的创建需要开辟虚拟机栈&#xff0c;本地方法栈、程序计数器等线程私有的内存空间。 在线程的销毁时需要回收这些系统资源。频繁的创建和销毁线程会浪费大量的系统资源&#xff0…

什么是线程池,线程池的作用

线程池&#xff0c;--其实就是一个 容纳多个线程的容器 &#xff0c;其中的线程可以反复使用&#xff0c;省去了频繁创建线程对象的操作 &#xff0c;--无需反复创建线程而消耗过多资源。 创建销毁线程是一个非常消耗性能的。 我们详细的解释一下为什么要使用线程池&#xff1f…

华为防火墙实战配置教程,太全了

防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙是系统的第一道防线&#xff0c;其作用是防止非法用户的进入。 本期我们一起来总结下防火墙的配置&#xff0c;非常全面&#xff0c;以华为为例。 防火墙的配置…

防火墙配置(命令)

拓扑图&#xff1a; 目的&#xff1a;PC1和PC2相互ping通。 配置命令&#xff1a; FW1: //添加端口IP [SRG-GigabitEthernet0/0/0]interface GigabitEthernet0/0/1 [SRG-GigabitEthernet0/0/1]ip add 192.168.1.1 24 [SRG]inter g0/0/2 [SRG-GigabitEthernet0/0/2]ip add 10.…

防火墙基础配置(二)

拓补图&#xff1a; 方案一&#xff08;子接口的形式&#xff09; 实验目的&#xff1a;解决防火墙上的接口不足以为其他区域服务的问题&#xff0c;比方说防火墙上只有两个接口&#xff0c;但是有三个区域&#xff0c;那这个实验的目的为了解决防火墙上的接口不足以为多区域提…

H3C防火墙基础配置2-配置安全策略

1 安全策略简介 安全策略对报文的控制是通过安全策略规则实现的&#xff0c;规则中可以设置匹配报文的过滤条件&#xff0c;处理报文的动作和对于报文内容进行深度检测等功能。 &#xff08;1&#xff09;规则的名称和编号 安全策略中的每条规则都由唯一的名称和编号标识。名称…

H3C防火墙-安全域配置举例

1. 组网需求 某公司以 Device 作为网络边界安全防护设备&#xff0c;连接公司内部网络和 Internet。公司只对内部提供Web 服务&#xff0c;不对外提供这些服务。现需要在设备上部署安全域&#xff0c;并基于以下安全需求进行域间策略 的配置。 • 与接口 GigabitEthernet1/0/1 …

Firewalld防火墙实例配置

文章目录 环境拓扑需求描述一、环境配置二、防火墙配置1、在网站服务器上配置防火墙2、网关服务器配置防火墙3、企业内网访问外网web服务器4、外网web服务器访问企业内部网站服务器 三、总结问题总结解决方案 环境拓扑 需求描述 1、 网关服务器连接互联网网卡ens33地址为100.1…

【Linux】配置网络和firewall防火墙(超详细介绍+实战)

&#x1f947;&#x1f947;【Liunx学习记录篇】&#x1f947;&#x1f947; 篇一&#xff1a;【Linux】VMware安装unbuntu18.04虚拟机-超详细步骤(附镜像文件&#xff09; 篇二&#xff1a;【Linux】ubuntu18.04系统基础配置及操作 篇三&#xff1a;【Linux】用户与组的操作详…

防火墙配置

防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙。它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统&#xff0c;依照特定的规则&#xff0c;允许或是限制传输的数据通过。防火墙对于我们的网络安全的重要性不言而喻 但是在实际的开发…

H3C防火墙-安全策略典型配置举例

基于 IP 地址的安全策略配置举例 1.组网需求 • 某公司内的各部门之间通过 Device 实现互连&#xff0c;该公司的工作时间为每周工作日的 8 点到 18点。 • 通过配置安全策略规则&#xff0c;允许总裁办在任意时间、财务部在工作时间通过 HTTP 协议访问财务数据库服务器的 Web…

华为防火墙配置教程

01 了解防火墙基本机制 配置防火墙之前请了解防火墙基本工作机制。 1.1 什么是防火墙 防火墙是一种网络安全设备&#xff0c;通常位于网络边界&#xff0c;用于隔离不同安全级别的网络&#xff0c;保护一个网络免受来自另一个网络的攻击和入侵。这种“隔离”不是一刀切&#x…

防火墙基本配置

防火墙 种类 1.包过滤技术 「 静态防火墙 动态防火墙 」 netfilter 真正的配置 位于linux内核的包过滤功能体系 称为linux防火墙的“内核态” iptables 防火墙的配置 工具 主要针对 网络层 针对IP数据包 「体现在对包的IP地址、端口等信息处理」 链表结构 链 ---- 容纳 规则…

防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)

实验要求 根据实验要求配置防火墙&#xff1a; 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户&#xff0c;反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一&#xff1a;配置各个终端、防火墙端口IP地址 终端以服务器为例&#x…

防火墙基础配置

状态防火墙 状态检测防火墙&#xff08;Stateful Firewall&#xff09;是一种网络安全设备&#xff0c;它可以检测和过滤网络流量&#xff0c;以保护网络不受未经授权的访问和攻击。 与传统的包过滤防火墙不同&#xff0c;状态检测防火墙可以跟踪网络连接的状态&#xff0c;并…

10分钟教你完全掌握防火墙配置!!!!!

今日提问 1.防火墙支持那些NAT技术&#xff0c;主要应用场景是什么&#xff1f; 2.当内网PC通过公网域名解析访问内网服务器时&#xff0c;会存在什么问题&#xff0c;如何解决&#xff1f;请详细说明 3.防火墙使用VRRP实现双机热备时会遇到什么问题&#xff0c;如何解决&…

H3C简单的防火墙配置

这里写目录标题 实验拓扑实验需求配置过程1.配置ip地址&#xff08;略&#xff09;2.配置去往公网的默认路由3.将端口绑定在信任域和不信任域4.配置ipv4安全模板5.配置ospf将内网的连通性完成6.配置nat &#xff08;easy ip的方式&#xff09;使内网PC可以访问外网 测试 实验拓…