当前位置: 首页 > news >正文

网站建设与开发考试b2b网站平台

网站建设与开发考试,b2b网站平台,商务厅网站建设意见,宁波网站建设使用技巧分享目录前言1.线程池原理介绍2.QThreadPool详细介绍反复执行同一个任务设置线程过期时间线程数量信息3.QThreadPool示例4.总结前言 线程池顾名思义就是同时管理多个线程的"池子",它是一种并发处理技术,在程序中使用线程池能够提高线程的使用效率…

目录

      • 前言
      • 1.线程池原理介绍
      • 2.QThreadPool详细介绍
          • 反复执行同一个任务
          • 设置线程过期时间
          • 线程数量信息
      • 3.QThreadPool示例
      • 4.总结

前言

线程池顾名思义就是同时管理多个线程的"池子",它是一种并发处理技术,在程序中使用线程池能够提高线程的使用效率,提高程序的稳定性。 本文从线程池的实现原理开始,介绍了QT框架里的线程池QThreadPool,并提供一个使用示例。

1.线程池原理介绍

线程池的实现思路大致是这样的,在程序启动时创建一定数量的线程交给线程池管理,它通过一个任务队列来给各个线程分配任务。当需要使用线程处理一些任务时,就把这些任务扔给线程池,让线程池决定这些任务由哪个线程执行。当空闲线程多的时候,线程池可以自动销毁空闲的线程,当线程不够用时线程池也能自动创建新的线程来执行任务。当然了,通常我们会对线程池设置一个最大线程数量。
使用线程池有以下几个好处:

  1. 提高程序效率:由于线程池中已经预先创建了一定数量的线程,因此无需每次都创建和销毁线程,从而降低了系统开销。
  2. 提高响应速度:任务可以很快地分配给线程处理,从而提高了程序的响应速度。
  3. 提高稳定性:使用线程池可以有效地控制系统资源的使用,避免了过度占用系统资源导致系统崩溃或死锁的风险。
  4. 提高可扩展性:线程池的大小可以动态调整,可以根据需要增加或减少线程数量,从而满足不同工作负载的需求。

在这里插入图片描述

2.QThreadPool详细介绍

QThreadPool是一个用于管理线程池的Qt类,它通过管理和复用QThread线程对象来减少线程频繁创建销毁所带来的系统资源消耗。每个Qt应用程序都有一个全局的线程池对象,我们可以通过QThreadPool::globalInstance()单例方法获取。

要使用线程池必须将任务类继承自QRunnable,并实现虚函数run(),例如:

class TaskOne : public QRunnable
{void run() override{qDebug() << "Hello world from thread" << 		QThread::currentThread();}
};TaskOne *task = new TaskOne();
// 默认情况下task归线程池所有,并在执行结束后自动删除。
QThreadPool::globalInstance()->start(task);
反复执行同一个任务

task可以反复执行,前提是在调用QThreadPool::start()函数之前,调用task->setAutoDelete(false),这样task任务执行完后就不会被QThreadPool删除。

设置线程过期时间

QThreadPool中的线程有个默认的过期时间30s,过期后线程会自动退出直到线程的start函数被再次调用。通过调用setExpiryTimeout()设置过期时间,如果设置一个负值,则线程永不过期。

线程数量信息

我们通过调用maxThreadCount()获取线程池中能使用的最大线程数量,该值可以通过setMaxThreadCount()来设置。调用 activeThreadCount()函数获取正在工作的线程数量。

3.QThreadPool示例

下面是一个简单的的QThreadPool应用示例。

#include <QRunnable>
#include <QThreadPool>
#include <QDebug>class MyTask : public QRunnable {
public:MyTask(int id) : id(id) {}void run() override {qDebug() << "Starting task " << id;// Do some workqDebug() << "Finished task " << id;}private:int id;
};int main(int argc, char *argv[])
{QThreadPool::globalInstance()->setMaxThreadCount(4);for (int i = 0; i < 10; ++i) {auto task = new MyTask(i);QThreadPool::globalInstance()->start(task);}QThreadPool::globalInstance()->waitForDone();return 0;
}

在上例中我们设置线程池的最大线程数为4,并循环创建了10个MyTask对象添加到线程池中。最后,我们调用waitForDone()函数等待所有任务完成。具体任务是在MyTask的run函数中执行的,可以通过传递不同的参数来执行不同的任务。

4.总结

QThreadPool的使用场景是执行长时间耗时的工作时。如果需要执行某些任务,又不想阻塞UI线程,我们就可以将这些任务放入线程池中并在后台运行,而不影响UI的响应速度。

QThreadPool的一般使用步骤如下:

  • 1.创建QRunnable的子类来表示要执行的任务。
  • 2.创建QThreadPool对象,并使用setMaxThreadCount()函数设置线程池中的线程数。
  • 3.创建一些QRunnable对象并调用QThreadPool::start()函数将它们添加到线程池中。
  • 4.等待所有任务完成,可以调用waitForDone()函数等待任务完成,也可以通过信号和槽获取任务结束信号。

以上就是本文的所有内容了,有问题欢迎指正,谢谢!

http://www.dinnco.com/news/28426.html

相关文章:

  • 网络网站建设电话站长seo查询
  • 乐山网站建设公司网站如何优化推广
  • WordPress302被篡改站长之家seo查询官方网站
  • 内江 网站建设seo代码优化
  • 帮人网站开发维护违法免费创建网站的平台
  • 建筑网结构广告网站建设网站排名优化
  • 建筑工程网人才网优化百度百科
  • 鞍山企业做网站成都seo优化外包公司
  • 国外免费网站贸易平台前十名黑帽seo优化软件
  • 资源网站平台建设方案网络营销的新特点
  • 自己怎么建设一个网站新闻20字摘抄大全
  • 做网站1天转多钱北京网站优化平台
  • 想找个人做网站营销宝
  • 花生壳如何建设网站百度快照的作用是什么
  • 网站域名被做网站的公司擅自更改seo搜索引擎优化培训班
  • wordpress的文章tag标签搜索引擎优化的步骤
  • 浏览器网站入口关键词收录
  • 淘宝客 插件 wordpressseo搜论坛
  • 仙居做网站的营销推广网站
  • 网站咨询窗口怎么做免费推广途径
  • 7块钱建购物网站百度资源分享网
  • 龙岗营销网站建设公司百度推广最近怎么了
  • 做兼职上什么网站网站seo是什么
  • 网站更改域名百度收录网站
  • 南皮县网站建设网络推广引流是做什么的
  • 医疗不可以做网站学seo需要学什么专业
  • 如何建立内部网站网站搭建公司哪家好
  • 网站的数据库做备份网站关键词优化wang
  • 网站建设情况推广普通话的意义论文
  • 从化做网站建设最新的新闻 今天