std::promise,std::future完整使用方法
时间: 2024-09-24 12:26:56 浏览: 43
C++11中std::future的具体使用方法
`std::promise` 和 `std::future` 是 C++11 引入的用于线程间的异步通信工具,它们通常一起使用来实现基于任务(Task-Based Asynchronous Programming)的模型。
1. **std::promise**:
- 这是一个模板类,它代表了一个可以设置值的对象。它有一个私有的、只读的状态(`std::promise<T>::ready()`),当值被设置时变为`true`。
- 创建 promise 对象,例如:
```cpp
std::promise<int> prom;
```
- 设置未来(future)会等待的任务或值:
```cpp
prom.set_value(42); // 或者 prom.set_exception(std::runtime_error("Some error"));
```
- 使用 `.get()` 方法获取承诺的结果,但这将阻塞当前线程直到结果可用:
```cpp
auto future = prom.get();
```
2. **std::future**:
- 这是另一个模板类,表示对某个在未来某个时刻可能可用的值的兴趣。我们不能直接创建一个 future,而是从 promise 获取它。
- 当 promise 设置了值后,future 就会变得可用:
```cpp
auto future = prom.get_future(); // 获取 promise 的 future
```
- 通过 `.wait()` 或 `.valid()` 判断 future 是否已准备好,然后使用 `.get()` 获取结果:
```cpp
if (future.valid()) {
int result = future.get();
}
```
阅读全文