Qt QtConCurrent 使用示例

简介

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

主要内容

另起线程

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

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

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

在线程池中运行

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

void Function();
QThreadPool pool;
QFuture 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 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 获得通知。

你可能感兴趣的:(qt,java,开发语言)