std::async(std
时间: 2024-11-28 21:17:58 浏览: 8
`std::async` 是 C++ 标准库提供的一个函数模板,用于非阻塞地启动一个新的线程执行指定的函数(也称为任务)。它的原型通常是这样的:
```cpp
template <typename F>
auto async(F&& f, std::launch policy = std::launch::deferred)
```
其中:
- `F` 是一个函数类型或可调用对象,代表你要异步执行的实际工作单元。
- `policy` 可选参数,定义了任务是如何被启动的。常见的选项有:
- `std::launch::deferred`(默认值):推迟线程的创建,直到首次调用 `.get()` 或 `.wait()`。
- `std::launch::async`:立即创建新的线程执行任务。
- `std::launch::sync`:如果线程池可用,就直接在当前线程上执行,否则和 `async` 一样。
当你使用 `std::async` 创建一个任务后,会返回一个 `std::future` 对象,可以用来查询任务的状态(是否完成,是否有错误,结果是什么)并获取结果。例如:
```cpp
std::future<int> future = std::async([]() { return some_expensive_computation(); });
int result;
if (future.wait_for(std::chrono::seconds(5)) == std::future_status::ready) {
result = future.get();
}
```
这里,如果计算在5秒内完成,`future.wait_for` 将返回 `std::future_status::ready`,然后我们可以调用 `.get()` 获取结果。
阅读全文