Cllback函数的使用

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

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

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

简单而言就是这样

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

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

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

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

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

这时引入一个新的函数 bind

c++bind函数使用 - 知乎

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

(不想写了,下次更)

你可能感兴趣的:(c++,后端,异步)