欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Qt QtConCurrent 使用示例

Qt QtConCurrent 使用示例

2024/10/24 2:01:59 来源:https://blog.csdn.net/m0_64240990/article/details/141690893  浏览:    关键词:Qt QtConCurrent 使用示例

简介

  QtConcurrent 是 Qt 框架中的一个模块,它提供了一种高级别的 API 来编写多线程程序,而无需直接使用线程、互斥锁或信号量等低级同步原语。QtConcurrent 允许你以声明性的方式启动任务,这些任务将在单独的线程中异步执行,同时你可以使用 QFuture 和 QFutureWatcher 来查询任务的状态和结果。

主要内容

另起线程

QtConCurrent 是qt 线程并发模块、(参数最多5个);

要在另一个线程中运行一个函数,可以使用 QtConcurrent: : run () :

void Function();
QFuture<void> future = QtConcurrent::run(Function);

在线程池中运行

         这将从默认 QThreadPool 获得的单独线程中运行 aFunction。可以使用 QFuture和QFutureWatcher 类来监视函数的状态。如果要使用专用线程池,可以将 QThreadPool 作为第一个参数传递

void Function();
QThreadPool pool;
QFuture<void> future = QtConcurrent::run(&pool, Function);

运行类成员函数

        run() 运行类成员函数

        run ()也接受指向成员函数的指针。第一个参数必须是常量引用或指向类实例的指针。在调用 const 成员函数时,通常使用 const 引用传递; 通常使用指针传递对于调用修改实例的非 const 成员函数。

QtConcurrent::run(this,&className::function,value,....) // value 函数的参数

        示例:

class sample
{
public:int Add(int a, int b){return a + b; }
};sample s
QFuture<void> future = QtConcurrent::run(&s, &sample::Add, 1, 2);// 等待线程结束
future.waitForFinished();// 获取返回值
int ret = future.result();

总结

  1. 向函数传递参数的方式:通过将参数添加到紧跟在函数名之后的 QtConcurrent::run()调用中来完成向函数传递参数。运行的机制是:在调用 QtConcurrent: : run ()的地方复制每个参数,并在线程开始执行函数时将这些值传递给线程。调用 QtConcurrent: : run ()后对参数所做的更改对线程不可见。
  2. 获取函数返回值的方式 返回值通过 QFuture 获得; 注意,QFuture: : result ()函数阻塞并等待结果可用。当函数完成执行并且结果可用时,使用 QFutureWatcher 获得通知。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com