最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt QThreadPool線程池的實現(xiàn)

 更新時間:2024年04月30日 09:29:25   作者:Mr.codeee  
QThreadPool管理和重新設(shè)計單個QThread對象,以幫助降低使用線程的程序中的線程創(chuàng)建成本,本文主要介紹了Qt QThreadPool線程池的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

1.簡介

QThreadPool類管理一個QThread集合。
QThreadPool管理和重新設(shè)計單個QThread對象,以幫助降低使用線程的程序中的線程創(chuàng)建成本。每個Qt應(yīng)用程序都有一個全局QThreadPool對象,可以通過調(diào)用globalInstance來訪問該對象。
要使用其中一個QThreadPool線程,請子類化QRunnable并實現(xiàn)run虛擬函數(shù)。然后創(chuàng)建該類的一個對象,并將其傳遞給QThreadPool::start。

主要特點(diǎn):

  • 線程復(fù)用:線程池中的線程可以重復(fù)使用,減少了線程創(chuàng)建和銷毀的開銷。
  • 資源管理:線程池可以幫助管理線程的生命周期,包括線程的創(chuàng)建、銷毀和線程數(shù)的控制。
  • 任務(wù)隊列:線程池通常與一個任務(wù)隊列一起使用,允許你將任務(wù)添加到隊列中,由線程池中的線程執(zhí)行。

2.常用方法

  • globalInstance(): 獲取全局的 QThreadPool實例。
  • maxThreadCount(): 獲取線程池中最大線程數(shù)。
  • setMaxThreadCount(int): 設(shè)置線程池中最大線程數(shù)。
  • activeThreadCount(): 獲取當(dāng)前活躍的線程數(shù)。
  • expiryTimeout(): 獲取線程的最長存活時間。
  • setExpiryTimeout(int): 設(shè)置線程的最長存活時間。
  • start(QRunnable *): 將一個 QRunnable 對象添加到線程池的任務(wù)隊列中,并在線程池中的一個線程上執(zhí)行它。
  • tryStart(QRunnable *): 嘗試立即在一個空閑線程上執(zhí)行 QRunnable 對象,如果失敗則返回 false。
  • waitForDone(int): 阻塞調(diào)用線程,直到所有任務(wù)執(zhí)行完畢或超時。
  • clear(): 清空任務(wù)隊列,停止所有正在執(zhí)行的任務(wù)。
  • releaseThread(): 通知線程池當(dāng)前線程已經(jīng)完成了一個任務(wù),可以重新被使用。

3.示例

我們創(chuàng)建了一個簡單的 QRunnable 子類 MyRunnable,并在主函數(shù)中使用了 QThreadPool 來執(zhí)行 4 個任務(wù)。我們設(shè)置了線程池的最大線程數(shù)為 4,這意味著同時最多有 4 個線程在執(zhí)行任務(wù)。其他的任務(wù)會在線程池中的線程變?yōu)榭捎脮r被執(zhí)行。

#include "widget.h"
#include "ui_widget.h"
#include <QRunnable>
#include <QThreadPool>
#include <QDebug>
#include <QMutex>
#include <QList>

QList<int> 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 i=0;i<20;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;
}

運(yùn)行結(jié)果:

到此這篇關(guān)于Qt QThreadPool線程池的實現(xiàn)的文章就介紹到這了,更多相關(guān)Qt QThreadPool線程池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • c語言++放在前面和后面的區(qū)別分析

    c語言++放在前面和后面的區(qū)別分析

    在C語言中,前綴自增(++i)和后綴自增(i++)操作符并不是同一個操作符,前綴自增操作符的優(yōu)先級高于后綴自增,同時得到的結(jié)果并不完全一致,因此需要區(qū)分
    2015-11-11
  • C++11返回類型后置語法的使用示例

    C++11返回類型后置語法的使用示例

    本篇文章主要介紹了C++11返回類型后置語法的使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • C++ Qt開發(fā)之CheckBox多選框組件的用法詳解

    C++ Qt開發(fā)之CheckBox多選框組件的用法詳解

    Qt是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應(yīng)用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹CheckBox單行輸入框組件的使用方法,需要的朋友可以參考下
    2023-12-12
  • C++ Boost TypeTraits庫使用詳解

    C++ Boost TypeTraits庫使用詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • 最新評論

    城固县| 谢通门县| 淮阳县| 金门县| 晋城| 湖州市| 固原市| 奎屯市| 介休市| 宝鸡市| 平顶山市| 永城市| 新巴尔虎右旗| 嫩江县| 旬阳县| 青州市| 鲁甸县| 饶阳县| 芦溪县| 新化县| 呼伦贝尔市| 洛宁县| 元氏县| 鞍山市| 利辛县| 平乐县| 宣武区| 晋中市| 通河县| 海门市| 山东省| 龙游县| 连江县| 余江县| 抚松县| 突泉县| 新绛县| 星座| 元氏县| 富蕴县| 绿春县|