http://blog.csdn.net/lefttime/article/details/5717349
作为Qt类中少有的基类, QRunnable提供了简洁有效的可运行对象的创建. 用QRunnable来创建独立的运行对象来运行 不涉及界面元素的数据处理过程 非常合适.
优点: 创建过程简洁, 使用方便, 配合着自身的autoDelete特性, 有点“招之即来, 挥之即去”的感觉.
缺点: 无法实时提供自身的运行状态.
举个处理过程中反馈进度的例子
main.cpp
- #include <QApplication>
- #include <QProgressBar>
- #include <QThreadPool>
-
- #include "runnableInst.h"
-
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
-
- QProgressBar progressBar;
- progressBar.setValue(50);
- progressBar.show();
-
- runnableInst* hInst = new runnableInst(&progressBar);
- QThreadPool::globalInstance()->start(hInst);
-
- return app.exec();
- }
runnableInst.h
- #ifndef RUNNABLEINST_H
- #define RUNNABLEINST_H
-
- #include <QRunnable>
-
- class QProgressBar;
- class runnableInst : public QRunnable
- {
- public:
- runnableInst(QProgressBar* progressBar);
- virtual ~runnableInst();
-
- void run();
-
- private:
- QProgressBar* m_ProgressBar;
- };
-
- #endif // RUNNABLEINST_H
runnableInst.cpp
- #include "runnableInst.h"
- #include <QTest>
- #include <QProgressBar>
-
- runnableInst::runnableInst(QProgressBar* progressBar)
- : QRunnable(), m_ProgressBar(progressBar)
- {
- }
-
- runnableInst::~runnableInst()
- {
-
- }
-
- void runnableInst::run()
- {
- for(int step = 1; step <= 100; step++)
- {
-
-
-
-
- QMetaObject::invokeMethod(m_ProgressBar, "setValue", Q_ARG(int, step));
- QTest::qSleep(100);
-
-
- }
- }
当QRunnable运行结束, 它自身会被销毁, 所以用不着担心内存泄露(除了指定设置setAutoDelete(false)); 不过要注意在数据或事件对象的处理~` 好比例子中QMetaObject::invokeMethod是比较危险的事!
分享到:
相关推荐
Qt框架中的多线程技术是开发高效、响应性应用程序的关键工具。在现代计算机系统中,多线程允许程序同时执行多个任务,提升程序性能并优化用户体验。本示例旨在教授如何在Qt环境中有效地利用多线程,特别是通过`...
**Qt多线程服务器详解** 在软件开发中,特别是在服务器端编程中,多线程技术是一种常见的优化手段,用于提高程序的并发处理能力。Qt是一个跨平台的C++图形...理解并掌握这些知识点,有助于开发出高性能的多线程应用。
**基于C++的Qt多线程** 在C++与Qt框架的结合中,多线程是一种重要的编程技术,它能够使应用程序充分利用多核处理器的计算能力,提高程序的执行效率和响应速度。Qt库提供了丰富的多线程支持,使得开发者可以方便地在...
Qt是一个强大的跨平台应用程序开发框架,提供了丰富的API来支持多线程编程。本篇文章将深入讲解如何使用Qt的线程池实现多线程HTTP下载,并涵盖限速下载及进度显示的相关知识。 首先,我们要了解Qt中的线程池...
在编程领域,Qt是一个...总之,Qt的多线程功能强大且灵活,结合QThread、信号槽和线程同步机制,能够帮助开发者编写高效、安全的多线程应用。理解并熟练掌握这些概念和技巧,对于提升Qt应用的性能和用户体验至关重要。
【QT多线程的使用】 在QT框架中,多线程功能主要由QThread类提供。多线程在软件开发中扮演着重要角色,尤其是在处理耗时任务时,它可以提高程序的响应速度和效率,避免主线程因长时间执行任务而阻塞用户界面。 **...
在Qt框架中,多线程处理多任务是提高应用程序性能和响应能力的重要手段。Qt提供了丰富的多线程支持,使得开发者能够充分利用现代计算机的多核处理器资源,避免UI线程因执行耗时操作而导致的界面假死问题。本文将深入...
QT Socket编程多线程服务器是将QT框架与网络通信中的Socket技术相结合,通过多线程实现高并发处理的服务器架构。在理解这个主题时,我们需要深入理解以下几个关键知识点: 1. **QT框架**:QT是一个跨平台的应用程序...
因此,在实际的高并发服务器应用中,多线程或异步编程模型(如QRunnable、QtConcurrent、QFuture等)通常是必要的,以充分利用多核处理器的性能。 总结起来,这个例子展示了如何在Qt中使用事件驱动的模型创建一个...
5. **Qt的并发工具**:除了QThread,Qt还提供了其他并发工具,如QFuture、QRunnable和QtConcurrent,它们简化了多线程编程,可以自动处理线程安全和线程间通信。 6. **更新UI的正确方式**:使用`QObject::...
标题为“Qt5的多线程小程序,实现按钮开关线程”,这意味着我们将深入探讨如何在Qt中通过按钮操作启动和停止线程,这对于理解多线程应用的交互性至关重要。 首先,我们要了解Qt5中的线程模型。Qt5提供了两种主要的...
2. **Qt与Web相关的多线程应用** - **网络访问**:`QNetworkAccessManager`通常在一个单独的线程中工作,以避免阻塞UI。通过`QNetworkReply`对象,可以在主线程中处理网络请求的结果。 - **WebEngine/WebView**:...
QT库是Qt公司开发的一个强大的跨平台应用程序开发框架,它提供了丰富的API用于构建桌面、移动以及嵌入式系统的用户界面和后端...在实际开发中,理解并熟练运用这些知识,可以编写出高效、稳定、易于维护的多线程应用。
这个示例展示了如何在QT5中使用`QThread`进行多线程编程,以及如何通过信号与槽机制在不同线程之间传递数据。注意,`QThread`的正确使用需要确保线程安全,避免数据竞争和死锁等问题。此外,线程的生命周期管理也...
总结来说,Qt的线程池、信号槽和lambda表达式结合使用,能让我们在C++应用程序中高效地管理多线程,同时保持代码的清晰和可维护性。通过理解并熟练运用这些技术,我们可以编写出更加健壮、响应迅速的应用程序。
在Python的GUI编程中,PyQt5是一个广泛使用的库,它提供了...总的来说,PyQt5的多线程编程结合进度条的使用,能够帮助开发者构建高效、用户友好的应用程序。理解并熟练掌握这些技术,对于编写高质量的GUI程序至关重要。
7. 异步编程:了解QT的异步模型,如QFuture、QThreadPool和QRunnable,优化数据库操作,避免阻塞UI线程。 8. 测试和调试:进行单元测试,确保每个功能模块的正确性,利用QT的调试工具进行问题定位。 9. 部署与发布...
1. **生成一个qm文件**:qm文件是Qt多语言国际化处理的核心,它包含了翻译后的字符串。 2. **时实切换qm文件**:应用程序可以动态切换不同的qm文件,以支持多语言。 #### 第十五章 多媒体编程 1. **音频组件**:...
5. 多线程和异步编程:如果项目涉及到复杂的数据处理,可能会讲解到如何使用Qt的QThread或QRunnable来实现并发。 6. MVC模式:TableWidget通常与Model-View-Controller模式结合使用,学习如何创建自定义的数据模型并...
- **多线程**:Qt的`QThread`类支持并发编程,使得长时间运行的任务可以在后台执行,不影响用户界面的响应。 - **网络编程**:Qt的`QTcpSocket`、`QUdpSocket`和`QNetworkAccessManager`等类提供网络通信功能。 -...