日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QThreadPool Class的翻译

發布時間:2025/3/15 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QThreadPool Class的翻译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QThreadPool Class的翻譯

**QThreadPool 類用來管理QThread集。**QthreadPool 管理和循環調用QThread對象,這樣多線程處理中可以減少資源的消耗。每一個Qt應用程序都有一個全局的QThreadPool對象,它可是通過globalInstance()來獲取。

創建QThreadPool 線程,需要子類化QRunnable,重寫run()虛函數。然后創建一個類的對象,然后將它移交到QThreadPool::start().


QThreadPool 默認會自動刪除QRunnable。使用QRunnale::setAutoDelete()來改變auto-deletion 標志。

QThreadPool 通過tryStart(this)(與QRunable::run()一并),支持多次執行QRunable。如果autoDelete 使能,當run()函數中的最后一個線程退出時,QRunnable 會快速刪除。如果autoDelete 使能,在同一個QRunnable 多次調用start(),會建立一個多個線程競爭的情形,這是不值得推薦的。

一段時間內,沒有被使用的線程將會失效。默認的失效時間是30000微秒(30秒)。這個默認時間可以同setExPiryTimeout()函數來設置。如果設置的時間是一個負數,將會是超時的機制失效。

調用maxThreadCount()來查詢最大支持的線程數。如果需要,可以通過調用setMaxThreadCount()函數來改變最大線程數。可以通過QThread::idealThreadCount()方法來查看默認的最大線程數。通過調用activeThreadCount()函數來獲取當前活動的線程數。

reserveThread()函數會保留一個線程共外部使用。當你在處理線程的時候,使用releaseThread(),以便該線程可以重復使用。本質上,這兩個函數會增減當前活動的線程數。當計算線程的耗時上,這個兩個函數還是很實用的。

需要注意的是,QThreadPool 是更低一層的類用來管理線程。可以查閱更高一層的類Qt Concurrent 模型。

該類的屬性介紹:

activeThreadCount:當前線程池里的活動線程。

expiryTimeout:超時時間。
請注意:設置expiryTimeout 對已經存在的的線程是沒有效用的。只有對新建的線程才有用。
推薦在一開始創建線程池的時候,在調用start()函數前就設置好expiryTimeout。

maxThreadCount:當前線程池的最大線程數。

stackSize:線程池工作線程的棧大小。

成員函數:
QThreadPool::~QThreadPool()
銷毀線程池。知道所有的runnables都已經完成,該函數將一直處在阻塞狀態。

QThreadPool *QThreadPool::globalInstance()
返回全局線程池。

void QThreadPool::releaseThread()
釋放之前一個被保留的線程。

void QThreadPool::reserveThread()
保留一個線程,忽略activeThreadCount()和maxThreadCount

void QThreadPool::start(QRunnable *runnable, int priority = 0)
保留一個線程并使用它運行runnable,除非此線程將使當前線程數超過maxThreadCount()。在這種情況下,runnable被添加到運行隊列中。priority參數可用于控制運行隊列的執行順序。

bool QThreadPool::tryStart(QRunnable *runnable)
試圖保留線程以運行runnable。

如果在調用時沒有線程可用,則此函數不執行任何操作并返回false。否則,使用一個可用線程立即運行runnable,此函數返回true。

bool QThreadPool::tryTake(QRunnable *runnable)
嘗試從隊列中刪除指定的runnable(如果尚未啟動)。如果runnable尚未啟動,則返回true,runnable的所有權將轉移到調用方(即使runnable->autoDelete()==true)。否則返回false。

bool QThreadPool::waitForDone(int msecs = -1)
等待所有線程退出并從線程池中刪除所有線程的時間最長為毫秒。如果刪除了所有線程,則返回true;否則返回false。如果msec為-1(默認值),則忽略超時(等待最后一個線程退出)。

本篇翻譯完畢,如有錯誤的地方,懇請讀者們多多指正。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的QThreadPool Class的翻译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。