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