std::future怎么用,举个例子
时间: 2024-01-21 19:05:12 浏览: 29
`std::future` 是 C++11 提供的一种异步编程方式,可以用于获取异步操作的结果。可以将一个异步操作封装成一个 `std::future` 对象,在需要获取结果时,通过 `std::future` 对象获取异步操作的结果。
下面是一个简单的例子,演示了如何使用 `std::future`:
```c++
#include <iostream>
#include <future>
int main()
{
// 将一个异步操作封装成 std::future 对象
std::future<int> future = std::async(std::launch::async, [](){
std::this_thread::sleep_for(std::chrono::seconds(3));
return 42;
});
// 主线程可以做其他的事情
std::cout << "Do something else...\n";
// 在需要获取结果时,通过 std::future 对象获取异步操作的结果
int result = future.get();
std::cout << "The result is " << result << std::endl;
return 0;
}
```
在上面的例子中,我们使用 `std::async` 函数将一个 lambda 表达式异步执行,并将返回值封装成一个 `std::future` 对象。在主线程中,我们可以做其他的事情,等异步操作完成后,再通过 `future.get()` 获取异步操作的结果。
需要注意的是,在调用 `future.get()` 时,如果异步操作还没有完成,会阻塞当前线程,直到异步操作完成并返回结果。因此,如果在主线程中调用 `future.get()`,应该确保异步操作已经完成,否则会阻塞主线程。