本文主要是介绍[Qt5] 使用QtConcurrent::run在异步线程中执行耗时函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 📢博客主页:https://loewen.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
- 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨
文章预览:
- 一. QtConcurrent::run异步线程操作
一. QtConcurrent::run异步线程操作
在Qt中,使用QtConcurrent::run
来在异步线程中执行耗时操作,并将结果发送回主线程进行后续处理,是一种非常高效且简洁的方式。
以下是一个基于这种设计的C++流程示例:
1、 定义耗时函数
首先,你需要一个耗时函数,这个函数将在后台线程中被执行。
#include <QDebug>
#include <QThread> // 假设的耗时函数
int longRunningTask(int input) { // 模拟耗时操作 QThread::sleep(5); // 假设这个函数需要5秒钟来完成 qDebug() << "Task completed in thread" << QThread::currentThreadId(); return input * 2; // 假设的处理结果
}
2、 使用QtConcurrent::run执行耗时函数
在你的主线程(通常是GUI线程)中,使用QtConcurrent::run来异步执行这个耗时函数。
#include <QtConcurrent>
#include <QFutureWatcher> // ... 在某个函数或方法中 ... // 调用耗时函数
int input = 10;
QFuture<int> future = QtConcurrent::run(longRunningTask, input); // 创建一个QFutureWatcher来监视future的状态
QFutureWatcher<int> *watcher = new QFutureWatcher<int>();
QObject::connect(watcher, &QFutureWatcher<int>::finished, [=]() { // 当任务完成时,这里会被调用 if (watcher->result() != -1) { // 假设-1是某种错误码 int result = watcher->result(); qDebug() << "Result received in main thread:" << result; // 在这里进行后续操作,使用result } watcher->deleteLater(); // watcher对象在任务完成后不再需要,使用deleteLater()来确保它会被适当地清理掉
}); watcher->setFuture(future); // 将future与watcher关联起来,让watcher开始监视future的状态
代码结尾的watcher->setFuture(future);
是将QFutureWatcher
对象watcher
与QFuture
对象future
关联起来。QFutureWatcher
是一个模板类,用于监视QFuture
对象的状态变化。当你调用QtConcurrent::run()
时,它会返回一个QFuture
对象,该对象代表了异步操作的结果。通过调用setFuture()
方法,你可以让QFutureWatcher
开始监视这个QFuture
对象。
下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。 |
这篇关于[Qt5] 使用QtConcurrent::run在异步线程中执行耗时函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!