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

网站建设流程及构架漳州做网站开发

网站建设流程及构架,漳州做网站开发,怎么做免费网站教程,深圳优化企业一、概述 在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建线程并销毁线程的过程势必会消耗内存。QThreadPool是Qt框架中用于管理线程池的类。它提供了一种高效的方式来管理和重用线程,从而…

一、概述

         在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建线程并销毁线程的过程势必会消耗内存。QThreadPool是Qt框架中用于管理线程池的类。它提供了一种高效的方式来管理和重用线程,从而减少线程创建和线程的开销。

二、QThreadPool的核心功能

1、线程重用:QThreadPool维护一组线程,任务完成后线程不会被销毁,而是保留在线程池中等待下一个任务。

2、任务队列:当所有线程都在忙碌时,新任务会被放入队列中,等待线程空闲处理。

3、自动扩展和收缩:根据任务数量动态调整线程池中的线程数量。

4、全局线程池:Qt提供了一个全局的QThreadPool实例,可以通过QThreadPool::globalInstance()访问。

三、QThreadPool的主要方法

1、void start(QRunnable *runnable, int priority = 0);

将任务(QRunnable对象)添加到线程池中执行 

2、bool tryStart(QRunnable *runnable);

尝试立即执行任务。如果没有可以线程,返回false 

3、 bool waitForDone(int msecs = -1);

阻塞当前线程,直到所有任务完成 

4、void setMaxThreadCount(int maxThreadCount); 

设置线程池最大线程池数 

5、 int activeThreadCount() const;

返回当前正执行任务的线程数 

6、 static QThreadPool *globalInstance(); 

返回全局的QThreadPool实例 

7、 void setExpiryTimeout(int expiryTimeout);

设置线程池中线程的过期时间(以毫秒为单位),当一个线程在指定时间内没有执行任务时,线程池会将该线程销毁,以减少资源占用。如果为负值(默认),则新创建的线程不会过期,即在线程池销毁之前,线程不会退出。

8、  void clear();

 清楚线程池,从队列中移除尚未启动的runnable

四、QRunnable类

        QThreadPool的任务是通过QRunnable对象表示的。QRunnable是一个抽象基类,需要继承它并实现run()方法来定义任务的具体逻辑。 

1、 virtual void run() = 0;

纯虚函数,子类必须实现。定义任务的具体逻辑

2、 void setAutoDelete(bool _autoDelete) { ref = _autoDelete ? 0 : -1; }

设置任务完成后是否自动删除,默认值为true。这个标志必须在调用QThread::strart()之前设置。在之后调用将出现未定义行为。

3、 bool autoDelete() const { return ref != -1; }

返回任务是否自动删除 

五、使用QThreadPool的步骤

1、创建任务:继承QRunnable并实现run()方法

// 自定义任务类
class MyTask : public QRunnable
{
public:MyTask(int id) : m_id(id) {}void run() override {qDebug() << "Task" << m_id << "started in thread" << QThread::currentThreadId();QThread::sleep(2); // 模拟耗时操作qDebug() << "Task" << m_id << "finished in thread" << QThread::currentThreadId();}private:int m_id;
};

2、将任务提交到线程池:使用QThreadPool::start()

    // 获取全局线程池QThreadPool* pool = QThreadPool::globalInstance();// 设置线程池的最大线程数pool->setMaxThreadCount(3);// 创建并提交任务for (int i = 0; i < 10; ++i) {MyTask* task = new MyTask(i);pool->start(task);}

3、等待任务完成(可选):使用QThreadPool::waitForDone()阻塞当前线程,直到所有任务完成 

    // 等待所有任务完成qDebug() << "Waiting for tasks to finish...";pool->waitForDone();qDebug() << "All tasks finished!";

 六、完整代码

#include <QCoreApplication>
#include <QThreadPool>
#include <QRunnable>
#include <QDebug>
#include <QThread>// 自定义任务类
class MyTask : public QRunnable
{
public:MyTask(int id) : m_id(id) {}void run() override {qDebug() << "Task" << m_id << "started in thread" << QThread::currentThreadId();QThread::sleep(2); // 模拟耗时操作qDebug() << "Task" << m_id << "finished in thread" << QThread::currentThreadId();}private:int m_id;
};int main(int argc, char *argv[])
{QCoreApplication app(argc, argv);// 获取全局线程池QThreadPool* pool = QThreadPool::globalInstance();// 设置线程池的最大线程数pool->setMaxThreadCount(3);// 创建并提交任务for (int i = 0; i < 10; ++i) {MyTask* task = new MyTask(i);pool->start(task);}// 等待所有任务完成qDebug() << "Waiting for tasks to finish...";pool->waitForDone();qDebug() << "All tasks finished!";return 0;
}

 七、运行结果

Task 0 started in thread 0x1a34
Task 1 started in thread 0x1a38
Task 2 started in thread 0x1a3c
Task 0 finished in thread 0x1a34
Task 3 started in thread 0x1a34
Task 1 finished in thread 0x1a38
Task 4 started in thread 0x1a38
Task 2 finished in thread 0x1a3c
Task 5 started in thread 0x1a3c
...
All tasks finished!

说明:线程池最多同时运行三个任务。当一个任务完成后,线程池会立即从队列中取出下一个任务执行。

八、注意事项

1、任务的生命周期

(1)如果QRunnable的autoDelete()为true(默认值),任务完成后会自动删除。

(2)如果需要在任务完成后手动管理内存,可以将autoDelete()设置为false。

2、线程池的大小

(1)默认情况下,QThreadPool的最大线程数为CPU核心数。

(2)可以通过setMaxThreadCount()调整线程池大小

九、总结

1、QThreadPool是Qt中用于管理线程池的类,适合处理大量短期的任务

2、通过QRunnable定义任务逻辑,并使用QThreadPool提交任务

3、可以设置线程池大小、等待任务完成,并管理任务的生命周期

http://www.dtcms.com/wzjs/818544.html

相关文章:

  • 外贸网站优化建设软件开发模型的v模型图
  • 国内做贵金属返佣比较多的网站政协网站建设意义
  • 有没有专门做家纺的网站网站可信认证
  • 网站优化排名服务做demo的网站
  • 企业网站源码推荐昊客网络
  • 温州网站改版公司wordpress卡片式主题
  • 网站建设带购物车个人网站怎样备案
  • 展示类网站建设域名怎么起
  • 长安外贸网站建设公司承德做网站优化
  • soho外贸网站中国职业技能培训中心官网
  • 做酒类直供网站行吗成品网站w灬源码1688永久网站
  • 深圳市官网网站建设报价学网页设计学徒培训
  • 网站社区建设百度网站链接
  • 国外网站建设的步骤广州站是不是广州火车站
  • 做购物网站支付需要怎么做c 网站开发中间层怎么写
  • 网站做优化应该具备什么铆焊加工平台
  • 濮阳做网站多少钱将网页制作成app
  • 公司介绍网站模板辽宁建设工程信息网新点
  • 在百度上建网站怎么建设花样云做网站怎样
  • 北京网站建设哪个好珠海市网站建设
  • 成都网站推广技巧微信公众号小程序怎么开发
  • 给女友惊喜做网站杭州响应式建站价格
  • 手机版网站开发网站建设实训室介绍
  • 门户网站介绍wordpress nginx固定链接
  • 新手建立网站的步骤自己做电影下载网站
  • 网站我优化有什么比较好的画册设计网站
  • 网站开发一般会使用框架吗网站建站目标
  • 如何申请网站com域名58同城网站官网
  • 还有河北城乡和住房建设厅网站吗网站服务器放置地
  • 网站站长如何赚钱山西seo推广方案