厦门 外贸公司做网站,正邦设计有限公司,广发证券 网站谁做的,计算机网站建设维护的基本知识1.简介
QThreadPool类管理一个QThread集合。 QThreadPool管理和重新设计单个QThread对象#xff0c;以帮助降低使用线程的程序中的线程创建成本。每个Qt应用程序都有一个全局QThreadPool对象#xff0c;可以通过调用globalInstance来访问该对象。 要使用其中一个QThreadPool…1.简介
QThreadPool类管理一个QThread集合。 QThreadPool管理和重新设计单个QThread对象以帮助降低使用线程的程序中的线程创建成本。每个Qt应用程序都有一个全局QThreadPool对象可以通过调用globalInstance来访问该对象。 要使用其中一个QThreadPool线程请子类化QRunnable并实现run虚拟函数。然后创建该类的一个对象并将其传递给QThreadPool::start。
主要特点
线程复用线程池中的线程可以重复使用减少了线程创建和销毁的开销。资源管理线程池可以帮助管理线程的生命周期包括线程的创建、销毁和线程数的控制。任务队列线程池通常与一个任务队列一起使用允许你将任务添加到队列中由线程池中的线程执行。
2.常用方法
globalInstance(): 获取全局的 QThreadPool实例。maxThreadCount(): 获取线程池中最大线程数。setMaxThreadCount(int): 设置线程池中最大线程数。activeThreadCount(): 获取当前活跃的线程数。expiryTimeout(): 获取线程的最长存活时间。setExpiryTimeout(int): 设置线程的最长存活时间。start(QRunnable *): 将一个 QRunnable 对象添加到线程池的任务队列中并在线程池中的一个线程上执行它。tryStart(QRunnable *): 尝试立即在一个空闲线程上执行 QRunnable 对象如果失败则返回 false。waitForDone(int): 阻塞调用线程直到所有任务执行完毕或超时。clear(): 清空任务队列停止所有正在执行的任务。releaseThread(): 通知线程池当前线程已经完成了一个任务可以重新被使用。
3.示例
我们创建了一个简单的 QRunnable 子类 MyRunnable并在主函数中使用了 QThreadPool 来执行 4 个任务。我们设置了线程池的最大线程数为 4这意味着同时最多有 4 个线程在执行任务。其他的任务会在线程池中的线程变为可用时被执行。
#include widget.h
#include ui_widget.h
#include QRunnable
#include QThreadPool
#include QDebug
#include QMutex
#include QListQListint g_list;
QMutex g_mutex;class MyRunnable : public QRunnable
{
public:void run() override{while(true){g_mutex.lock();if(g_list.size() 0){g_mutex.unlock();break;}qDebug() Task running in thread: QThread::currentThread() deal num g_list.first();g_list.pop_front();g_mutex.unlock();}qDebug() Task running in thread: QThread::currentThread() finished ;}
};Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui-setupUi(this);for(int i0;i20;i){g_list.append(i);}QThreadPool::globalInstance()-setMaxThreadCount(4);for (int i 0; i 4; i){MyRunnable *r new MyRunnable();r-setAutoDelete(true);QThreadPool::globalInstance()-start(r);}
}Widget::~Widget()
{delete ui;
}
运行结果 4.更多推荐
libVLC 专栏介绍-CSDN博客
QtFFmpegopengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客
QCharts -1.概述-CSDN博客