C++回调函数,多线程promisefuture传数据

本文介绍了C++中的回调函数概念,它允许通过函数指针实现动态调用不同的函数,适用于同一接口下实现不同功能的情况。同时,文章详细解析了在多线程环境下,如何使用std::promise和std::future在不同线程间传递数据。线程1创建promise对象,线程2接收并设置值,线程1通过future获取线程2设置的值,如果值未设置,调用get会阻塞,直至值被设置。
摘要由CSDN通过智能技术生成

回调函数

理解

**回调函数
通过将回调函数的地址传给调用者从而实现动态调用不同的函数。因此当我们想通过一个统一接口实现不同的内容,这时用回调函数非常合适。
若要实现回调函数,最关键的是要把调用函数的参数定义为函数指针类型。函数指针的定义这里稍
微提一下。比如:
int (ptr)(void); 这里ptr是一个函数指针,其中(ptr)的括号不能省略,因为括号的优先级高于星号,那样就成了一个返回类型为整型的函数声明了。int为返回类型,括号内为函数的参数。

**逐步解析
在线程1中创建一个std::promise对象

std::promise<int> promiseObj;

目前为止,该promise对象没有任何管理的值,但它承诺肯定会有人对其进行赋值,一旦被赋值,就可以通过其管理的std::future对象来获取该值。
但是,假设线程1创建了该promise对象并将其传给线程2,那么线程1怎样知道线程2什么时候会对promise对象进行赋值呢?
答案是使用std::future对象
每个std::promise对象都有个对应的std::future对象,其他人可以通过它来获取promise设置的值。
所以,线程1将会创建std::promise对象,然后在将其传递给线程2之前从它那里获取std::future对象。

std::future<int> futureObj = promiseObj.get_future();
<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值