欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.簡介

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

主要特點:

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

2.常用方法

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

3.示例

我們創(chuàng)建了一個簡單的 QRunnable 子類 MyRunnable,并在主函數(shù)中使用了 QThreadPool 來執(zhí)行 4 個任務。我們設置了線程池的最大線程數(shù)為 4,這意味著同時最多有 4 個線程在執(zhí)行任務。其他的任務會在線程池中的線程變?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;
}

運行結果:

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

相關文章

  • C語言中互斥鎖與自旋鎖及原子操作使用淺析

    C語言中互斥鎖與自旋鎖及原子操作使用淺析

    今天不整GO語言,我們來分享一下以前寫的C語言代碼,來看看互斥鎖、自旋鎖和原子操作的demo,示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值
    2023-01-01
  • C++ STL 序列式容器與配接器的簡單使用

    C++ STL 序列式容器與配接器的簡單使用

    本文主要介紹了C++ STL 序列式容器與配接器的簡單使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • C語言按關鍵字搜索文件夾中文件的方法

    C語言按關鍵字搜索文件夾中文件的方法

    這篇文章主要介紹了C語言按關鍵字搜索文件夾中文件的方法,涉及C語言文件操作及字符串查找的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C++中const修飾符的詳解及其作用介紹

    C++中const修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中const修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 詳解C語言中的函數(shù)、數(shù)組與指針

    詳解C語言中的函數(shù)、數(shù)組與指針

    這篇文章主要介紹了C語言中的函數(shù)、數(shù)組與指針,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • C語言中scanf與scnaf_s函數(shù)詳解

    C語言中scanf與scnaf_s函數(shù)詳解

    大家好,本篇文章主要講的是C語言中scanf與scnaf_s函數(shù)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Visual Studio新建類從默認internal改為public

    Visual Studio新建類從默認internal改為public

    本文將介紹如何將Visual Studio中的internal修飾符更改為public,以實現(xiàn)更廣泛的訪問和重用,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • C語言的變量與常量 字符字符串與轉義字符詳解

    C語言的變量與常量 字符字符串與轉義字符詳解

    這篇文章主要介紹了詳解C語言的變量與常量 字符字符串與轉義字符,包括其之間的區(qū)別是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2021-10-10
  • C語言實現(xiàn)簡易停車場管理系統(tǒng)

    C語言實現(xiàn)簡易停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++中的多態(tài)詳談

    C++中的多態(tài)詳談

    多態(tài)通俗來說就是多種形態(tài),本文通過實例代碼給大家介紹C++中的多態(tài)定義及實現(xiàn),通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-05-05

最新評論