微信网站建设多少钱,网站地址查询域名,dede手机网站更新,免费视频app软件哪个好Qt中的异步相关类
今天在学习别人的项目时#xff0c;看到别人包含了QFuture类#xff0c;我没有见过#xff0c;于是记录一下。
直接在AI助手中搜索QFuture,得到的时Qt中异步相关的类。于是直接查询一下Qt异步中相关的类。
在Qt中#xff0c;异步编程是一个重要的概念看到别人包含了QFuture类我没有见过于是记录一下。
直接在AI助手中搜索QFuture,得到的时Qt中异步相关的类。于是直接查询一下Qt异步中相关的类。
在Qt中异步编程是一个重要的概念它允许开发者在不阻塞主线程的情况下执行耗时的任务。
Qt Concurrent 提供了并行处理迭代容器的map、filter和reduce算法类似于函数式编程中的概念。包括QFuture、QFutureWatcher和QFutureSynchronizer等类用于访问和监控异步计算的结果。 QFuture 表示一个异步操作的结果可以附加继续操作continuations。通过QFuture::then()方法可以在一个异步操作完成后继续执行另一个操作。支持错误处理通过QFuture::onFailed()方法可以为特定错误类型附加错误处理程序。 QFutureWatcher 用于监控QFuture对象的状态如完成、失败或取消。当QFuture的状态发生变化时QFutureWatcher可以发出信号。 QThreadPool 用于管理线程池可以提交任务到线程池中异步执行。 Qt::runFunction 一个模板函数用于在后台线程中异步执行函数并返回一个QFuture对象。 Qt::connect 可以与QFuture一起使用将信号连接到槽上以便在异步操作完成时执行槽函数。 qt-async 一个第三方库提供了异步值async values和异步小部件async widgets用于异步操作的结果、错误和进度的表示。 QtAsyncSql 一个第三方库提供了异步和线程化的SQL查询支持。包括AsyncQuery类用于执行异步SQL查询。提供了ConnectionManager类用于维护数据库连接。 QtAsyncRunner 一个抽象接口用于启动异步函数允许在Qt应用程序中轻松地将计算密集型函数提交到线程中执行。
1.使用QFuture和QFutureWatcher进行异步操作
#include QCoreApplication
#includeQFuture
#includeQFutureWatcher
#includeQtConcurrent/QtConcurrentRun
#includeQDebugvoid AsyncTask(int nNumber)
{QThread::sleep(2); // 模拟耗时操作qDebug() Task Complete With Number: nNumber;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 使用QtConcurrent::run将函数提交到线程池QFuturevoid future QtConcurrent::run(AsyncTask,42);// 创建一个QFutureWatcher来监控任务QFutureWatchervoid watcher;QObject::connect(watcher,QFutureWatchervoid::finished,a,QCoreApplication::quit);// 将watcher与future关联watcher.setFuture(future);QtConcurrent::run(AsyncTask,42);return a.exec();
} 使用QThreadPool和Qt::runFunction进行异步操作 #include QCoreApplication
#include QThreadPool
#include QtConcurrent/QtConcurrentRun
#include QDebugvoid myFunction() {qDebug() Function is running in a separate thread.;
}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 将函数提交到线程池QtConcurrent::run(myFunction);// 启动事件循环等待异步任务完成return a.exec();
}3. 使用QFuture链式调用Continuations
#include QCoreApplication
#include QFuture
#include QtConcurrent/QtConcurrentRun
#include QDebugQString processResult(int number) {return QString(Processed %1).arg(number);
}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 异步执行任务并获取结果QFutureint future QtConcurrent::run([]() - int {QThread::sleep(2); // 模拟耗时操作return 42;});// 使用then()方法添加一个continuationQFutureQString processedFuture future.then(processResult);// 等待处理结果QString result processedFuture.result();qDebug() result;// 启动事件循环等待异步任务完成return a.exec();
}上述程序在同一程序运行结果
好了相关介绍就到这里。