std::future和std::promise详解
创作时间:
作者:
@小白创作中心
std::future和std::promise详解
引用
CSDN
1.
https://m.blog.csdn.net/xie__jin__cheng/article/details/144624212
概要
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 提供了异常传递的能力,增强了代码的健壮性。
热门推荐
手动挡汽车驾驶完全指南:从零基础到熟练掌握
从零基础到老司机:自学开车全攻略
陕西历史博物馆:基本陈列免费,特展需购票
供暖季三大纠纷如何解决?法官详解维权要点
“平民燕窝”雪耳:六种养生功效与三款经典食谱
丽江古城与大理古城:两颗璀璨的文化明珠
红枣枸杞子排骨玉米煲汤:一碗养生汤的营养密码
泰国行前必读:社交礼仪、宗教禁忌与法律红线
日本一周内连遭地震台风袭击,南海沟大地震风险引发关注
8000元赔偿化解邻里漏水纠纷,西宁法院调解显成效
墙面漏水易引发霉菌滋生,专家详解处理与预防要点
房屋漏水取证攻略:4种关键证据助你维权
秦始皇时期六大工程:四座至今屹立,见证中华文明统一之路
行军有道:古代战争中的路线选择与速度控制
2024中山民生答卷②|交通项目不断“上新”,满足群众出行新期盼
新的时空坐标,引领中山拥抱“大桥经济”
抱子甘蓝种植全攻略:四大环节确保高产优质
从选种到收获:一文掌握抱子甘蓝种植关键技术
研究发现:心理因素可影响90%以上癌症病情,身心疗愈成治疗新方向
六大蔬果含抗癌物质,医生:可降低皮肤癌风险
各地婚假天数大不同:最长30天,多地已取消晚婚假
南方人的玉米排骨汤秘籍:从选材到烹饪的全方位指南
维生素C不能防感冒但可缓解症状,专家详解补充指南
维生素C补充剂VS橙子:正常饮食就能满足需求
“世界长寿之乡”广西巴马举办祝著节 传承瑶族非遗之美
突破性TPA机制将Transformer内存降低90%,姚期智团队开源新成果
海南携手高德地图升级适老化出行服务,让老年人出行更便捷
大理自驾游:洱海畔的风花雪月
大理自驾游攻略:天水出发,一路美景
张红甫推荐:玉米排骨汤的营养奥秘