std::thread 返回值 非阻塞
时间: 2023-11-23 13:55:10 浏览: 112
::thread的返回值是非阻塞的,这意味着当线程结束时,它的返回值可能还没有准备好。为了避免这种情况,可以使用std::future和std::promise来获取线程的返回值。std::promise是一个对象,它保存了一个值,std::future是一个对象,它可以访问std::promise保存的值。可以使用std::async函数来创建一个异步任务,并返回一个std::future对象,以便在任务完成时获取结果。下面是一个使用std::async和std::future获取线程返回值的示例代码:
```c++
#include <iostream>
#include <future>
int foo(int x) {
return x * 2;
}
int main() {
std::future<int> result = std::async(foo, 10);
std::cout << "Waiting for result..." << std::endl;
int res = result.get();
std::cout << "Result: " << res << std::endl;
return 0;
}
```
在这个示例中,我们使用std::async函数创建一个异步任务,并将foo函数和参数10传递给它。std::async函数返回一个std::future对象,我们可以使用它来获取任务的结果。在调用std::future的get函数时,如果结果还没有准备好,它会阻塞当前线程,直到结果准备好为止。在这个示例中,我们等待结果并将其打印到控制台上。
阅读全文