http://blog.csdn.net/lefttime/article/details/5717349

作为Qt类中少有的基类, QRunnable提供了简洁有效的可运行对象的创建.  用QRunnable来创建独立的运行对象来运行 不涉及界面元素的数据处理过程 非常合适.

优点: 创建过程简洁, 使用方便, 配合着自身的autoDelete特性, 有点“招之即来, 挥之即去”的感觉.

缺点: 无法实时提供自身的运行状态.

举个处理过程中反馈进度的例子

main.cpp

  1. #include <QApplication>
  2. #include <QProgressBar>
  3. #include <QThreadPool>
  4. #include "runnableInst.h"
  5. int main(int argc, char *argv[])
  6. {
  7. QApplication app(argc, argv);
  8. QProgressBar progressBar;
  9. progressBar.setValue(50);
  10. progressBar.show();
  11. runnableInst* hInst = new runnableInst(&progressBar);
  12. QThreadPool::globalInstance()->start(hInst);
  13. return app.exec();
  14. }

runnableInst.h

  1. #ifndef RUNNABLEINST_H
  2. #define RUNNABLEINST_H
  3. #include <QRunnable>
  4. class QProgressBar;
  5. class runnableInst : public QRunnable
  6. {
  7. public:
  8. runnableInst(QProgressBar* progressBar);
  9. virtual ~runnableInst();
  10. void run();
  11. private:
  12. QProgressBar* m_ProgressBar;
  13. };
  14. #endif // RUNNABLEINST_H

runnableInst.cpp

  1. #include "runnableInst.h"
  2. #include <QTest>
  3. #include <QProgressBar>
  4. runnableInst::runnableInst(QProgressBar* progressBar)
  5. : QRunnable(), m_ProgressBar(progressBar)
  6. {
  7. }
  8. runnableInst::~runnableInst()
  9. {
  10. }
  11. void runnableInst::run()
  12. {
  13. for(int step = 1; step <= 100; step++)
  14. {
  15. // 处理数据过程
  16. //...
  17. // 这两句只是测试用, 针对不同的环境可采用相应的进度反馈
  18. QMetaObject::invokeMethod(m_ProgressBar, "setValue", Q_ARG(int, step));
  19. QTest::qSleep(100);
  20. //...
  21. }
  22. }

当QRunnable运行结束, 它自身会被销毁, 所以用不着担心内存泄露(除了指定设置setAutoDelete(false)); 不过要注意在数据或事件对象的处理~` 好比例子中QMetaObject::invokeMethod是比较危险的事!

 

Qt多线程应用--QRunnable的更多相关文章

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

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

  2. Qt多线程-总结QThread-QThreadPool-QtConcurrent

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

  3. SeetaFaceQt:Qt多线程

    为什么要做多线程,说个最简单的道理就是我们不希望在软件处理数据的时候界面处于无法响应的假死状态.有些处理是灰常花时间的,如果把这样的处理放到主线程中执行,就会导致软件一条路走到底,要等到处理完才能接收 ...

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

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

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

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

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

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

  7. [转] Qt 多线程学习

    Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...

  8. QT多线程笔记

    1.QT多线程涉及到主线程和子线程之间交互大量数据的时候,使用QThread并不方便,因为run()函数本身不能接受任何参数,因此只能通过信号和槽的交互来获取数据,如果只是单方面简单交互数据还过得去, ...

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

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

随机推荐

  1. JavaScript Basics_Fundamentals Part 1_Variables

    JavaScript Variables JavaScript 变量(Variables)是用于存储数据值的容器. 创建一个 JavaScript 变量,可以使用关键字 let. Example le ...

  2. mybatis整合spring下的的各种配置文件

    1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

  3. SQL学习——IN运算符

    IN的作用 IN运算符允许您在WHERE子句中指定多个值. IN运算符是多个OR条件的简写. IN的语法 SELECT column_name(s) FROM table_name WHERE col ...

  4. jQuery EasyUI 数据网格

    jQuery EasyUI 数据网格 - 转换 HTML 表格为数据网格 本节将介绍jQuery EasyUI数据网格的运用,主要内容为如何将HTML表格转换为数据网格. 本实例演示如何转换表格(ta ...

  5. sed原理及sed命令格式 ,缓存区,模式空间

    4.1            Sed工作原理 sed是一个非交互式的流编辑器.所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出:而所谓流编辑器,是指sed每次只从 ...

  6. Vue介绍:vue项目搭建

    一.环境搭建 二.项目创建 三.认识项目 四.项目功能 一.环境搭建 *安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ *安装cnpm npm insta ...

  7. 01 js数据类型

    1.不管什么语言,上来就应该是数据类型了.js也不例外.那么基本的数据类型我们有,boolean, number, string, null, undefine, symbol, object, fu ...

  8. TensorFlow中numpy与tensor数据相互转化

    numpy与tensor数据相互转化: *Numpy2Tensor 虽然TensorFlow网络在输入Numpy数据时会自动转换为Tensor来处理,但是我们自己也可以去显式的转换: data_ten ...

  9. 算法9-----输出全排列(递归)---移除K个数,剩下最小数。

    1.题目:给定一个字符串,输出所有的字典序. 如: 输入字符串:'ac',输出:['ac','ca'] 输入字符串:‘abc' ,输出:['abc','acb','bac','bca','cab',' ...

  10. 详解mpstat等性能监测命令的使用

    mpstat是Multiprocessor Statistics的缩写,是实时监控工具,报告与cpu的一些统计信息这些信息都存在/proc/stat文件中,在多CPU系统里,其不但能查看所有的CPU的 ...