回调函数,我们经常在Windows用到,可到了如今让我自己给别人提供回调函数,着实让我懵了一把。这东西怎么是实现啊?——以前我可是总使用别人的。
什么是回调函数呢?它的原理机制又是怎么样的呢?从英文单词的理解到使用方法的分析,我自己总结了一下,不知是否正确,大家给些想法。
打个通俗的比方:老板给我交代一项任务(我当然是力巴了),让我给A项目做个方案,尽快完成,完成后给他打个电话,并把报价和项目周期告诉给他,他要和用户联系并对项目评估。
这里面有几项要素了:
1、老板[LevelUP]=上层
2、我[LevelLow]=底层
3、A项目[Param]=参数
4、电话[CallBackNumber]=联系方式(Call Back number)
5、报价和项目周期[retData]=返回的数据
6、尽快=没有要求是马上,因此是异步方式
7、和用户联系并对项目评估=老板接到电话之后要做的事情[上层要完成的工作]
那么,回调函数可以理解为:
上层对其下层的调用,回调函数的地址就是下层完成工作之后通知上层联络方式,回调函数的返回参数是下层完成工作之后返回上层的数据,回调函数的实现就是上层接到通知和数据之后自己随后好作的工作。
回调函数使用的场合:
1、异步数据处理
2、上下层之间的数据交换
从层次关系上看:
是上层应用提供给下层应用的“接口”
由于是跨层、跨内存的,因此:
回调函数只能以地址的形式传递,就像电话号码一样(管它是办公室电话、还是手机,反正打这个电话就能找到老板)。
至此,有个问题:
虽然callback函数的codes是由上层实现的,但是底层有没有把callback内容embed到自己的进程中?callback依然是在用户的进中完成?或者是说,底层仅仅给上层一个singal。还是相反?
如果按照上面的类比看,callback的codes应该在上层的内存段运行比较合理一些。或者,callback的codes是在一个share/common memory之中?
希望大家给出一些讨论。