版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题:Qt多线程-总结QThread-QThreadPool-QtConcurrent     本文地址:http://techieliang.com/2017/12/616/

1. 总结

QThread:Qt提供的最基础的线程类,一个对象管理一个线程,自己维护线程启动停止,创建销毁,当然也能基于此类自己建立一个线程池

QThreadPool:Qt提供的基于QThread实现的线程池,只需要提供给线程池“任务”即可,每一个“任务”需要继承QRunnable,pool还贴心的帮忙在运行完成后释放内存。只不过runnable不支持信号槽,可以做多重继承QObject即可。

QtConcurrent:并行计算的高级API,用起来很方便,完全不需要想线程的问题,全都是静态函数,可以运行自定义函数也提供了对容器的操作函数。

相关博客:

Qt多线程-QThread
QThread安全的结束线程
Qt多线程-QThreadPool线程池与QRunnable
Qt多线程-QtConcurrent并行运算高级API

2. 详细对比

2.1. Qt事件处理

只有QThread支持。但是其他两个可以用QApplication::postEvent发出事件

2.2. Qt信号槽

QThread完全支持,QThreadPool的QRunnable可以通过多重继承支持

Concurrent提供的map/filter函数可以利用QFutureWatcher,使用此方式可用信号控制线程,但仍然无发通过信号槽对线程的数据做修改

run就完全与信号槽无缘了,毕竟调用的只是一个函数

2.3. 线程优先级

这个优先级设置以后不一定有效,要看系统

QThread完全支持,可以用setPriority函数

2.4. 其他

Concurrent所有函数都支持QFuture,同时Concurrent支持指定QThreadPool

3. 使用

  • 只进行一次运行,或者调用不频繁不需要长时间开着线程,也不需要数据交互,直接Concurrent省事,毕竟只需要一行,也不需要定义什么类。但如果不希望包含QT += Concurrent,那就用线程池吧。
  • 单次不频繁,需要数据交互,三个都能用,对于Concurrent虽然没有信号槽但是可以自定义函数参数,注意线程安全即可。
  • 频繁调用,一定不要重复的创建销毁线程,可以用线程池
  • 长时间在幕后运行,一般这样的线程总要有数据交互的,建议直接QThread,主要是QThread还支持事件处理,能做的事情会很多。
转载请以链接形式标明本文标题和地址:Techie亮博客 » Qt多线程-总结QThread-QThreadPool-QtConcurrent

Qt多线程-总结QThread-QThreadPool-QtConcurrent的更多相关文章

  1. Qt 线程基础(QThread、QtConcurrent、QThreadPool等)

      使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使 ...

  2. Qt 线程基础(QThread、QtConcurrent等)

    [-] 使用线程 何时使用其他技术替代线程 应该使用 Qt 线程的哪种技术 Qt线程基础 QObject与线程 使用互斥量保护数据的完整 使用事件循环防止数据破坏 处理异步执行 昨晚看Qt的Manua ...

  3. Qt 线程基础(QThread、QtConcurrent等) 2

    使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使用线 ...

  4. Qt多线程-QtConcurrent并行运算高级API

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QtConcurrent并行运算高级API     本文地址:http://tec ...

  5. Qt多线程-QThreadPool线程池与QRunnable

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThreadPool线程池与QRunnable     本文地址:https:/ ...

  6. Qt多线程-QThread

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThread     本文地址:http://techieliang.com/2 ...

  7. 【QT】 Qt多线程的“那些事”

    目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QTh ...

  8. 1.QT多线程使用小结

    开头 一个进程可以有一个或更多线程同时运行.线程可以看做是"轻量级进程",进程完全由操作系统管理,线程即可以由操作系统管理,也可以由应用程序管理. Qt 使用QThread来管理线 ...

  9. Qt 多线程和网络编程学习

    一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...

随机推荐

  1. 20155218 2006-2007-2 《Java程序设计》第一周学习总结

    20155218 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 浏览教材每章提出一个问题 组建如何与容器互动 PATH与classpath的对比 java的 ...

  2. 20155305 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 单元测试 1. ...

  3. 深度学习开源库tiny-dnn的使用(MNIST)

    tiny-dnn是一个基于DNN的深度学习开源库,它的License是BSD 3-Clause.之前名字是tiny-cnn是基于CNN的,tiny-dnn与tiny-cnn相关又增加了些新层.此开源库 ...

  4. day 1 异常基本功能

    1.什么是异常?程序出现的错误 In [1]: open('xxx.txt') ------------------------------------------------------------ ...

  5. Lite OS学习之事件EVENT

    1. Lite OS的事件EVENT,就是一个任务向另外一个任务通知事件的,不能数据传输.看下有的函数,实际比较复杂 2. 具体还是看编程,先全局结构体整个事件变量 /*事件控制结构体*/ EVENT ...

  6. MYSQL查看当前正在使用的数据库命令

    select database();

  7. c++编译器处理 函数返回值

    X bar() { X xx; return xx; } // compiler generated temporary X __temp0; ( bar( __temp0 ), __temp0 ). ...

  8. 解决WCF传输的数据量过大问题

    今天写了个WCF接口,然后自测通过,和别人联调时报 远程服务器返回错误: (413) Request Entity Too Large        错误!记得以前写的时候也出现过这个错误,大致解决办 ...

  9. Docker--从安装到搭建环境

    docker 1. ubuntu下安装docker 安装docker有两种方法: 一种是用官方的bash脚本一键安装. 直接一条命令就解决了: $ curl -sSL https://get.dock ...

  10. 杂谈微服务架构下SSO&OpenAPI访问的方案。

    本篇杂谈下微服务架构下WEB应用的浏览器与OpenAPI访问架构与方案.读者可对比传统架构下应用的此话话题的区别.或者有其它方案的欢迎交流