回调函数

最近看到一篇回调函数的文章,现转帖一下
-------------------------------------------------------------------
回调函数,我们经常在Windows用到,可到了如今让我自己给别人提供回调函数,着实让我懵了一把。这东西怎么是实现啊?——以前我可是总使用别人的。
什么是回调函数呢?它的原理机制又是怎么样的呢?从英文单词的理解到使用方法的分析,我自己总结了一下,不知是否正确,大家给些想法。

打个通俗的比方:老板给我交代一项任务(我当然是力巴了),让我给A项目做个方案,尽快完成,完成后给他打个电话,并把报价和项目周期告诉给他,他要和用户联系并对项目评估。
这里面有几项要素了:
1、老板[LevelUP]=上层
2、我[LevelLow]=底层
3、A项目[Param]=参数
4、电话[CallBackNumber]=联系方式(C all Back number)
5、报价和项目周期[retData]=返回的数据
6、尽快=没有要求是 马上 ,因此是 异步 方式
7、和用户联系并对项目评估=老板接到电话之后要做的事情[上层要完成的工作]
那么,回调函数可以理解为:
上层对其下层的调用,回调函数的地址就是下层完成工作之后通知上层联络方式,回调函数的返回参数是下层完成工作之后返回上层的数据,回调函数的实现就是上层接到通知和数据之后自己随后好作的工作。

回调函数使用的场合:
1、异步数据处理
2、上下层之间的数据交换

从层次关系上看:
是上层应用 提供给 下层应用的“接口”

由于是跨层、跨内存的,因此:
回调函数只能以地址的形式传递,就像电话号码一样(管它是办公室电话、还是手机,反正打这个电话就能找到老板)。

至此,有个问题:
虽然callback函数的codes是由上层实现的,但是底层有没有把callback内容embed到自己的进程中?callback依然是在用户的进中完成?或者是说,底层仅仅给上层一个singal。还是相反?

如果按照上面的类比看,callback的codes应该在上层的内存段运行比较合理一些。或者,callback的codes是在一个share/common memory之中?
-----------------------------------------------------------------------
反正我个人的理解就是把一个函数作为另一个函数的参数来进行传递。

posted @ 2011-12-10 14:24  swjm119  阅读(256)  评论(0编辑  收藏  举报