最近的一个需求是将同步工作流程改为异步操作
然后就需要用到线程池(我不会手写线程池,懒得学,有现成的直接用)
当线程中的任务失败了,主进程如何获取任务状态呢,这时就需要用到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
bind最常用的功能之一,是由类成员函数构造bind对象;想想看,如何由类成员函数(非static成员函数)构造回调函数?答案是很难,而通过bind,却可以很容易做到。
(不想写了,下次更)