Qt中实现多线程的方式。1、利用继承QThread类,重写run函数实习。2、将对象使用moveToThread方法,利用信号槽实现。3、利用QtConcurrent相关QFuture实现。

以前一直用继承QThread,实现它的run()函数的方式实现。这种方式简单粗暴易于实现。后来发现有人用moveToThread这个方式去实现,官方推荐这种方式。

情况1、只是需要执行一次,建议使用moveToThread和QtConcurrent,方便简洁。

情况2、需要不停地执行,继承QThread更好点,这样就run函数实现功能即可。当然也可以用moveToThread的方式,不过就是要自己在写定时器去出发。

情况3、好多任务需要采用多线程,建议采用moveToThread的方式,把所有任务放到一个类,然后根据情况再触发执行。

以上只是个人经验不一定适用所有。

一个简易的例子

按钮点击的时候调用

#include "doworker.h"
#include <QDebug>doWorker::doWorker(QObject *parent): QObject(parent)
{m_thread = new QThread(this);moveToThread(m_thread);m_thread->start();
}doWorker::~doWorker()
{m_thread->quit();m_thread->deleteLater();
}void doWorker::slot_worker1()
{qDebug() << "slot_worker1 " << QThread::currentThread()->currentThreadId();for (int i = 0; i < 10000000; ++i){qDebug() << "******************: "<< i;}
}
moveToThread::moveToThread(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags)
{ui.setupUi(this);m_worker1 = new doWorker;connect(ui.pushButton,SIGNAL(clicked()),m_worker1,SLOT(slot_worker1()),Qt::QueuedConnection);  }moveToThread::~moveToThread()
{}void moveToThread::on_pushButton_clicked()
{qDebug() << "on_pushButton_clicked " << QThread::currentThreadId();}

可以参考

重点:怎样正确的使用QThread类(注:包括推荐使用QThread线程的新方法QObject::moveToThread) - 苦涩的茶 - 博客园 (cnblogs.com)https://www.cnblogs.com/liushui-sky/p/5829563.html在Qt使用moveToThread() qt的线程 - 简书 (jianshu.com)https://www.jianshu.com/p/9eee3c5208c4

Qt中多线程moveToThread相关推荐

  1. QT 中多线程实现方法总结

    第一: 用QtConcurrentRun类,适合在另一个线程中运行一个函数.不用继承类,很方便 第二:用QRunnable和QThreadPool结合.继承QRunnable,重写run函数,然后用Q ...

  2. Qt中多线程间的同步

    文章目录 1 Qt中多线程间的同步 1 Qt中多线程间的同步 多线程编程的本质是什么? 并发性是多线程编程的本质. 在宏观上,所有线程并行执行. 多个线程间相互独立,互补干涉. 常规解决方案设计: 问 ...

  3. Qt中多线程与界面组件的通信

    文章目录 1 多线程与界面组件的通信 1.1 通过信号与槽实现多线程与界面组件的通信 1.2 通过自定义事件实现多线程与界面组件的通信 1 多线程与界面组件的通信 有趣的问题: 是否可以在子线程中创建 ...

  4. Qt中多线程间的互斥

    文章目录 1 多线程间的互斥 1.1 生产消费者问题 1.2 QMutex 1.3 死锁问题 1.4 信号量 1 多线程间的互斥 值得思考的问题: 多个线程间除了在时序上可能产生依赖,在其它方面是否也 ...

  5. c#,c++,qt中多线程访问UI控件线程的问题汇总

    c#和MFC中可以创建UI控件及模态/非模态对话框,Qt中只能在主UI线程中创建访问UI控件. c#和MFC中可以通过全局变量或指针句柄等方式在工作线程中访问其他UI线程控件,其中c#需要Invoke ...

  6. QT中使用moveToThread

    QT中使用项目中很多时候会用到moveToThread,与主线程分隔开,在这里可以说一个很简单的例 子来使用,直接上代码: datasave.h文件 #ifndef DATASAVE_H #defin ...

  7. Qt中多线程的一种使用

    系统需要在子窗体中进行一个耗时的数据融合过程,之前意识到UI所在的主线程会被卡死的情况,但因为赶进度需要扩展新功能就暂时没顾上,只用了一种相对妥协的方法,QProgressDialog用于进度的显示, ...

  8. QT 中的多线程之 moveToThread

    文章目录 1. 概述 2. 方法描述 3. 代码: 4. 运行结果 5. 注意事项 6. 结语 1. 概述 在 Qt 中,多线程也被广泛用于实现后台任务.异步操作.多任务处理等功能.通过使用多线程,可 ...

  9. 简单说说对QT中moveToThread实现多线程操作的理解

      在平时的编码过程中经常碰到QT的多线程问题,也大量接触了QT中的两种主流多线程写法,一种是继承QThread类并重载run函数,在run函数中写一个状态机或者计时器来实现对线程运作:一种是通过mo ...

最新文章

  1. write solid code 零散(原文)
  2. IOS开发笔记13-Object-C中的NSString
  3. unrecognised EXT_CSD revision 6解决办法
  4. 如何ping端口_干货 | 如何正确处理常见的8大网络故障
  5. HR:不录用她,是因为她“太傻白甜了……”
  6. activimq java集成_Java消息队列-Spring整合ActiveMq
  7. 程序猿必须要知道的一个内容:客户端+服务端二(源码解析、建议收藏)
  8. 2.权限管理准备工作:你应该知道的ASP.NET网站最基本的安全措施!
  9. python工程师干什么的_Python就业前景和工资待遇分析,你学Python了吗?
  10. MyEclipse中背景颜色的设定
  11. Python学习之路_day_11(装饰器)
  12. python下载网易云音乐付费歌曲有哪些_学习python总结 - 下载网易云音乐单首歌曲...
  13. Kubernetes之YAML语法
  14. Java excel添加水印
  15. CSS3:boder-radius
  16. Python数据分析实战(1)数据分析概述
  17. 中空介孔载银二氧化硅聚苯乙烯微球/核壳聚苯乙烯/介孔二氧化硅微球/环氧树脂复合材料的制备
  18. cie1931 python绘制_科学网—gnuplot与CIE1931 XYZ三刺激值曲线 - 范学良的博文
  19. 鸿蒙系统深度解读(三)
  20. 旁观OpenGL里的透视投影矩阵

热门文章

  1. MyBatis拦截器分页
  2. Java练习题1-入门(含解析)
  3. Android进程间通信 深入浅出AIDL
  4. 程序猿的一万种解压方式
  5. mysql io次数_MySQL_揭秘SQL优化技巧 改善数据库性能,优化目标   1、减少 IO 次数 - phpStudy...
  6. 疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC
  7. NBA表格_一个公式算出的NBA历史球星排序,你认可吗
  8. 解决Chrome突然不能访问的问题
  9. 让保险更加智能 金融壹账通荣膺年度保险AI技术创新奖
  10. PAT 1024 科学计数法 (20分) C语言实现