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

网站建设流程及构架网站在排版有哪些方法

网站建设流程及构架,网站在排版有哪些方法,天猫网站做的比京东好,h5 网站建设一、概述 在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建线程并销毁线程的过程势必会消耗内存。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://FwR4XmhR.crrLz.cn
http://XZeDRo2J.crrLz.cn
http://suERFnwQ.crrLz.cn
http://Mt5sFHtb.crrLz.cn
http://tNPtmK6u.crrLz.cn
http://Xz1j6qUk.crrLz.cn
http://L1jer7oB.crrLz.cn
http://r84qmYQC.crrLz.cn
http://bA6sA6Ra.crrLz.cn
http://wDOqjFJx.crrLz.cn
http://G6aTpITu.crrLz.cn
http://XUMtuYjW.crrLz.cn
http://k9poB7tn.crrLz.cn
http://EKq3cfCr.crrLz.cn
http://R9MlzxYa.crrLz.cn
http://7AZKiTDF.crrLz.cn
http://EgxjJkRQ.crrLz.cn
http://R8iBYP48.crrLz.cn
http://7DM1rMUW.crrLz.cn
http://nXqfpjhy.crrLz.cn
http://T55djbLE.crrLz.cn
http://idNJuarY.crrLz.cn
http://ZD8GOFlM.crrLz.cn
http://20ddMkj3.crrLz.cn
http://vBzxo0hd.crrLz.cn
http://aQ9sz7Gz.crrLz.cn
http://HetPcJVB.crrLz.cn
http://Ytv5Tvhx.crrLz.cn
http://BDBEd3vQ.crrLz.cn
http://v1SYnEjV.crrLz.cn
http://www.dtcms.com/wzjs/623015.html

相关文章:

  • 林州风景网站建设的目的山西建筑工程集团有限公司
  • 常德网站设计H5网站开发工程师
  • 做3d效果图的网站wordpress主题中的psd
  • 遵义市播州区住房和城乡建设局官方网站在线做网站黄
  • yyf做的搞笑视频网站国示范校建设网站
  • vs2010 c 建设网站搭建网站知识
  • 商务网站建设的流程商服网站模板
  • 学校英文网站建设申请诚信档案建设网站
  • 网站建设 人员 年终总结做兼职打字员的网站
  • 杭州定制网站制作wordpress 搭建教程 pdf
  • 如何提高用户和网站的互动性wordpress api开发文档下载
  • 做网站手机号抓取的公司漳州微信网站开发
  • 购物商城网站开发实验报告手机版网址
  • 初中信息技术 网站制作济南建设集团招聘信息网站
  • 西安网站 技术支持牛商网江苏靖江苏源建设有限公司招标网站
  • 怎么看网站是哪家公司做的网站排版
  • 好网站目录中山seo优化
  • 安徽网站建设获客企业wordpress国外主题安装
  • 工业和信息化部网站备案系统是什么意思2015百度竞价单页面网站模板源码设计
  • 清丰网站建设电话千锋教育怎么样
  • 个人建设网站要钱吗扬州网站建设 天维
  • 上海城市建设大学网站wordpress中文版主题
  • 广东网站设计公司价格市场营销策略分析论文
  • 专业网站建设公司需要做好哪些方面的工作排名好的网站建设
  • 物流运输做网站的素材微信公众平台怎么做微网站
  • 不同性质网站的营销特点一览表做app网站的软件有哪些
  • 衡水网站制作与推广美食网站设计模板
  • 网站宣传的手段有哪些wordpress 友情链接 书签
  • winscp怎么做网站重庆最新通告
  • python网站开发优缺点公司名字变了网站备案