Cllback函数的使用

最近的一个需求是将同步工作流程改为异步操作

然后就需要用到线程池(我不会手写线程池,懒得学,有现成的直接用)

当线程中的任务失败了,主进程如何获取任务状态呢,这时就需要用到callback函数了

简单而言就是这样

int callback (int x)
{
    return x;
}
void thread_func(int x, std::function<int(int)> f) {
 cout<< f(x);
}
int main() {
    std::unique_ptr<thread_pool>thread_pool(10);
    thread_pool->add_task([x, callback](){thread_func(x,callback)});
}

但是我们会发现,这样和直接在线程中执行函数中的逻辑没有什么区别,主进程依然无法得知有效信息。

这时我们想到了类,类的成员函数可以作为callback函数传递吗?

很不幸,只有类的静态成员函数才可以作为callback函数,静态函数只可以访问静态数据成员,这样的使用范围还是有限,所以类的成员函数可以作为callback函数吗?

静态成员函数能作为callback函数的原因是每种类只存在一个的关系,类的成员函数每个类对象都有一个,那么只要指定一个类对象的成员函数似乎也可以

这时引入一个新的函数 bind

c++bind函数使用 - 知乎

bind最常用的功能之一,是由类成员函数构造bind对象;想想看,如何由类成员函数(非static成员函数)构造回调函数?答案是很难,而通过bind,却可以很容易做到。

(不想写了,下次更)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值