1.概要
std::future和std::promise
2.内容
std::future 和 std::promise 是 C++11 引入的标准库组件,用于实现线程间的同步和通信。它们提供了一种机制,允许一个线程设定某个值(通过 std::promise),而另一个线程可以等待这个值并获取它(通过 std::future)。这在线程间传递结果或异常时非常有用。
std::promise
std::promise 用于设置一个共享状态的值,这个值可以在将来被 std::future 获取。主要成员函数有:
set_value(T value):设置共享状态的值。set_exception(std::exception_ptr e):设置共享状态的异常。get_future():返回一个与std::promise共享状态的std::future对象。
std::future
std::future 用于访问共享状态的值或异常。主要成员函数有:
get():获取共享状态的值。如果值还未被设置,则阻塞直到值被设置。如果共享状态存储了一个异常,则get()会重新抛出这个异常。wait():阻塞直到共享状态的值被设置或存储了一个异常。wait_for(duration):阻塞直到指定的时间段过去或共享状态的值被设置。wait_until(time_point):阻塞直到指定的时间点或共享状态的值被设置。valid():检查std::future是否有共享状态。
使用示例
以下是一个简单的示例,展示了如何使用 std::promise 和 std::future 在线程间传递结果:
#include <iostream>
#include <thread>
#include <future>
void threadFunction(std::promise<int> promiseObj) {
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些工作
promiseObj.set_value(10); // 设置共享状态的值
}
int main() {
// 创建一个 promise 对象
std::promise<int> promiseObj;
// 获取与 promise 共享状态的 future 对象
std::future<int> futureObj = promiseObj.get_future();
// 创建一个线程并传递 promise 对象
std::thread th(threadFunction, std::move(promiseObj));
// 等待并获取共享状态的值
std::cout << "Value: " << futureObj.get() << std::endl;
// 等待线程结束
th.join();
return 0;
}
在这个示例中:
- 主线程创建了一个
std::promise<int>对象。 - 通过
promiseObj.get_future()获取一个std::future<int>对象。 - 创建并启动一个新线程,将
std::promise<int>对象(通过std::move移动)传递给新线程。 - 新线程执行一些工作(模拟为睡眠2秒),然后通过
promiseObj.set_value(10)设置共享状态的值。 - 主线程通过
futureObj.get()获取共享状态的值,并输出它。 - 主线程等待新线程结束。
这种机制使得线程间的结果传递变得简单和直观,并且 std::future 和 std::promise 提供了异常传递的能力,增强了代码的健壮性。
3.关联链接
std::future和std::promise-优快云博客
gnome-session-properties-优快云博客
4.关联知识

2275

被折叠的 条评论
为什么被折叠?



