QtConcurrent::map()和QtConcurrent::mapped的却被
时间: 2024-09-02 16:04:08 浏览: 83
Qt QtConcurrent 多线程 demo
`QtConcurrent::map()` 和 `QtConcurrent::mapped()` 是 Qt 库中的两个并发工具函数,它们用于并行地对列表、数组或其他可迭代容器中的元素应用一个函数。以下是它们的基本介绍:
1. `QtConcurrent::map()`:这是一个高阶函数,它接受一个容器(如QList、 QVector 或 QListIterator 等),以及一个 lambda 函数或者可调用对象。这个函数会将给定的函数应用于容器中的每个元素,并返回一个新的 Future 对象。Future 表示操作的结果将在某个时间点可用。调用 `.wait()` 可以阻塞主线程直到所有任务完成。
```cpp
QFuture<void> future = QtConcurrent::map(container, function);
future.wait(); // 阻塞主线程直到所有映射完成
```
2. `QtConcurrent::mapped()`:与 `map()` 类似,但它通常用于直接获取结果而不仅仅是等待。它直接返回一个容器类型的结果,每个元素都是通过传入的函数处理后的值。如果你不需要等待所有任务完成,可以这样做:
```cpp
QList<int> mappedResult = QtConcurrent::mapped(container, function);
```
这两个函数在需要处理大量数据并且希望提高程序性能时非常有用,因为它们利用了多线程技术,将计算任务分解到多个处理器核心上,提高了效率。
阅读全文