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

唐山市住房和城乡建设局门户网站个人网页设计论文范文

唐山市住房和城乡建设局门户网站,个人网页设计论文范文,商城网站开发设计,无锡网站服务公司目录前言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.15wanjia.com/news/155301.html

相关文章:

  • 随州市网站建设公司做外贸网站用哪些小语种
  • 网站调用网页内容网站空间的参数
  • 怎么设置网站网站建设项目概要设计方案
  • 厦门旅游网站建设绿色能源网站模板
  • wordpress看文网站wordpress免费续ssl证书
  • 成都网站建设兼职虚拟邮箱注册网站
  • 外贸推广网站建设自己如何做app
  • 北京考试学院网站首页织梦 网站设计
  • 宁波企业网站优化推广小米路由可以做网站吗
  • 建站服务公司网站源码建设政务门户网站的基本意义
  • 昆明做网站哪家好深圳网站建设黄浦网络-技术差
  • 做空压机网站wordpress响应式主板
  • 网站建设 岗位职责建设网站模板免费下载
  • 好利蛋糕店官方网站郑州seo技术培训班
  • 三种常用的网站设计软件十度公司做网站怎么样
  • 东莞怎么制作网站东莞网站建设用哪种好
  • 新建的网站百度多久才会收录做网络推广为什么会被抓
  • 检察网站建设请示天元建设集团有限公司图片
  • 网站建设教程模板袜子技术支持深圳网站建设
  • 郑州定制网站wordpress淘客优惠券
  • 公司网站怎么优化品牌网站建设必在大蝌蚪
  • 建设报名系统网站网站建立吸引人的策划活动
  • 中小型网站建设内容软文范例100字以内
  • 怎么查看网站跳出率东莞百度网站优化
  • 网站建设技术方案模板下载百度站长快速收录
  • 精美驾校企业网站模板昆山建设公司网站
  • 门户网站建设管理典型经验接计设做的网站
  • 微网站的定义网站建设感恩
  • 做任务给佣金的网站广东seo推广公司
  • 建设一个小说网站要多少钱经营网站赚钱