`
qimo601
  • 浏览: 3446630 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Qt多线程应用--QRunnable

    博客分类:
  • Qt
阅读更多

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

 

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

 

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

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

 

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

main.cpp

 

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

 

runnableInst.h

 

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

 

runnableInst.cpp

 

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

 

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

分享到:
评论

相关推荐

    11.Qt多线程_QT多线程_

    Qt框架中的多线程技术是开发高效、响应性应用程序的关键工具。在现代计算机系统中,多线程允许程序同时执行多个任务,提升程序性能并优化用户体验。本示例旨在教授如何在Qt环境中有效地利用多线程,特别是通过`...

    Qt多线程服务器

    **Qt多线程服务器详解** 在软件开发中,特别是在服务器端编程中,多线程技术是一种常见的优化手段,用于提高程序的并发处理能力。Qt是一个跨平台的C++图形...理解并掌握这些知识点,有助于开发出高性能的多线程应用。

    基于c++的qt多线程

    **基于C++的Qt多线程** 在C++与Qt框架的结合中,多线程是一种重要的编程技术,它能够使应用程序充分利用多核处理器的计算能力,提高程序的执行效率和响应速度。Qt库提供了丰富的多线程支持,使得开发者可以方便地在...

    qt 线程池实现多线程下载

    Qt是一个强大的跨平台应用程序开发框架,提供了丰富的API来支持多线程编程。本篇文章将深入讲解如何使用Qt的线程池实现多线程HTTP下载,并涵盖限速下载及进度显示的相关知识。 首先,我们要了解Qt中的线程池...

    Qt多线程源码

    在编程领域,Qt是一个...总之,Qt的多线程功能强大且灵活,结合QThread、信号槽和线程同步机制,能够帮助开发者编写高效、安全的多线程应用。理解并熟练掌握这些概念和技巧,对于提升Qt应用的性能和用户体验至关重要。

    QT多线程的使用 - 觅影 - 博客园1

    【QT多线程的使用】 在QT框架中,多线程功能主要由QThread类提供。多线程在软件开发中扮演着重要角色,尤其是在处理耗时任务时,它可以提高程序的响应速度和效率,避免主线程因长时间执行任务而阻塞用户界面。 **...

    Qt 之多线程处理多任务

    在Qt框架中,多线程处理多任务是提高应用程序性能和响应能力的重要手段。Qt提供了丰富的多线程支持,使得开发者能够充分利用现代计算机的多核处理器资源,避免UI线程因执行耗时操作而导致的界面假死问题。本文将深入...

    QT Socket编程 多线程服务器

    QT Socket编程多线程服务器是将QT框架与网络通信中的Socket技术相结合,通过多线程实现高并发处理的服务器架构。在理解这个主题时,我们需要深入理解以下几个关键知识点: 1. **QT框架**:QT是一个跨平台的应用程序...

    Qt-简单服务器-不用thread

    因此,在实际的高并发服务器应用中,多线程或异步编程模型(如QRunnable、QtConcurrent、QFuture等)通常是必要的,以充分利用多核处理器的性能。 总结起来,这个例子展示了如何在Qt中使用事件驱动的模型创建一个...

    qt编程_在子线程中更新UI界面

    5. **Qt的并发工具**:除了QThread,Qt还提供了其他并发工具,如QFuture、QRunnable和QtConcurrent,它们简化了多线程编程,可以自动处理线程安全和线程间通信。 6. **更新UI的正确方式**:使用`QObject::...

    Qt5的多线程小程序,实现按钮开关线程

    标题为“Qt5的多线程小程序,实现按钮开关线程”,这意味着我们将深入探讨如何在Qt中通过按钮操作启动和停止线程,这对于理解多线程应用的交互性至关重要。 首先,我们要了解Qt5中的线程模型。Qt5提供了两种主要的...

    qt线程网页资料收集

    2. **Qt与Web相关的多线程应用** - **网络访问**:`QNetworkAccessManager`通常在一个单独的线程中工作,以避免阻塞UI。通过`QNetworkReply`对象,可以在主线程中处理网络请求的结果。 - **WebEngine/WebView**:...

    QT实现的线程处理过程

    QT库是Qt公司开发的一个强大的跨平台应用程序开发框架,它提供了丰富的API用于构建桌面、移动以及嵌入式系统的用户界面和后端...在实际开发中,理解并熟练运用这些知识,可以编写出高效、稳定、易于维护的多线程应用。

    QT5线程QThread使用示例

    这个示例展示了如何在QT5中使用`QThread`进行多线程编程,以及如何通过信号与槽机制在不同线程之间传递数据。注意,`QThread`的正确使用需要确保线程安全,避免数据竞争和死锁等问题。此外,线程的生命周期管理也...

    Qt thread pool 线程池样例,信号槽,跨线程 lambda

    总结来说,Qt的线程池、信号槽和lambda表达式结合使用,能让我们在C++应用程序中高效地管理多线程,同时保持代码的清晰和可维护性。通过理解并熟练运用这些技术,我们可以编写出更加健壮、响应迅速的应用程序。

    PyQt5多线程的执行和停止

    在Python的GUI编程中,PyQt5是一个广泛使用的库,它提供了...总的来说,PyQt5的多线程编程结合进度条的使用,能够帮助开发者构建高效、用户友好的应用程序。理解并熟练掌握这些技术,对于编写高质量的GUI程序至关重要。

    QT系统Educational-Management-System.zip

    7. 异步编程:了解QT的异步模型,如QFuture、QThreadPool和QRunnable,优化数据库操作,避免阻塞UI线程。 8. 测试和调试:进行单元测试,确保每个功能模块的正确性,利用QT的调试工具进行问题定位。 9. 部署与发布...

    Qt跨平台界面应用开发 - 王桂林老师总结的书籍

    1. **生成一个qm文件**:qm文件是Qt多语言国际化处理的核心,它包含了翻译后的字符串。 2. **时实切换qm文件**:应用程序可以动态切换不同的qm文件,以支持多语言。 #### 第十五章 多媒体编程 1. **音频组件**:...

    QT-tableWidget-跳变之舞V1.0-记录学习1

    5. 多线程和异步编程:如果项目涉及到复杂的数据处理,可能会讲解到如何使用Qt的QThread或QRunnable来实现并发。 6. MVC模式:TableWidget通常与Model-View-Controller模式结合使用,学习如何创建自定义的数据模型并...

    Qt要点和难点实际应用方向和具体案例代码&代码解析

    - **多线程**:Qt的`QThread`类支持并发编程,使得长时间运行的任务可以在后台执行,不影响用户界面的响应。 - **网络编程**:Qt的`QTcpSocket`、`QUdpSocket`和`QNetworkAccessManager`等类提供网络通信功能。 -...

Global site tag (gtag.js) - Google Analytics