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(默认值),则忽略超时(等待最后一个线程退出)。

本篇翻译完毕,如有错误的地方,恳请读者们多多指正。

QThreadPool Class的翻译相关推荐

  1. Qt 并行计算 Concurrent Run的翻译

    资料来源:https://doc.qt.io/qt-5/qtconcurrentrun.html Concurrent Run的简介: QtConcurrent::run() 是开启单独一个线程来运行 ...

  2. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  3. “Attention is All You Need 翻译

    <p><img src="output_0_0.png" alt="png"></p> "Attention is ...

  4. 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qysh123/article/deta ...

  5. 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...

  6. 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler

    全文翻译(四) TVM An Automated End-to-End Optimizing Compiler 6.3 嵌入式GPU评估 对于移动GPU实验,在配备ARM Mali-T860MP4 G ...

  7. 全文翻译(三) TVM An Automated End-to-End Optimizing Compiler

    全文翻译(三) TVM An Automated End-to-End Optimizing Compiler 5. 自动化优化 考虑到一组丰富的调度原语,剩下的问题是为DL模型的每一层,找到最佳的算 ...

  8. 全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 3.优化计算图 计算图是在DL框架中表示程序的常 ...

  9. 全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样的硬件 ...

最新文章

  1. 字符设备驱动程序之poll机制
  2. 网站排名和权重骤降的原因是什么?又该如何处理?
  3. NYOJ 23 取石子
  4. dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
  5. 局域网ARP协议和欺骗技术及其对策
  6. 利用solr实现商品的搜索功能
  7. 大数据架构如何挑选机器.
  8. Linux 中的文件压缩与解压
  9. Java8新的异步编程方式 CompletableFuture(三)
  10. JavaFX 2 XYCharts和Java 7功能
  11. android回收站目录详解,android - 如何在回收站适配器外部的回收站视图中获取当前商品的位置 - 堆栈内存溢出...
  12. Qt工作笔记-在ListWidget中单线程检索数据
  13. 使用git建立本地仓储管理代码【转】
  14. 微信公众号 语音转文字api_快速上手——微信公众号开发接入
  15. ABAP 培训笔记 part 7
  16. 如何安装vs2010助手?
  17. 离散数学总复习精华版(最全 最简单易懂)已完结
  18. gmail 邮件客户端设置
  19. Subpalindromes
  20. CV笔记1:颜色空间介绍及转换

热门文章

  1. Qt学习笔记(一) 第一个Qt应用程序
  2. extjs chart无法在panel中显示_手绘风格的 JS 图表库:Chart.xkcd
  3. 【随笔】卷积神经网络中的卷积怎么卷?
  4. 科大星云诗社动态20211214
  5. 科大星云诗社动态20210402
  6. 通过History Trends Unlimited通过统计台式机Chrome浏览器Top10网页历史访问量(2021.11.23)
  7. 第05课:神经网络基础知识
  8. postman 400 bad request 原因_盐城400电话
  9. OpenGL编程指南5:学习绘制不同风格的曲线
  10. JavaScript中判断是否存在某属性