回调函数小结

上一篇 / 下一篇  2012-07-21 18:52:16 / 个人分类:C\C++

回调函数可以分为两种:同步调用和异步调用。

同步调用:
void func(void (*f)(void *), void * p)
其中:
func是调用函数,f是一个函数指针,指向具体的实现函数(即回调函数),p是参数,可传给f作为它的参数,
接下来在func的函数体内就可以这么调用:f(p),相当于主程序间接调用了f函数。
func相当于提供了一个框架(没有具体实现的操作),在不同的场合下,可以通过f指向具体相应的函数,同时把当前场合下的参数传给f来实现相应的操作。

异步调用:
异步调用可以这么理解:
C经理给小A交代了一项任务,但他并不知道小A什么时候能完成,于是他跟小A说:你什么时候任务完成了,跟我说一声。接下来C经理就去做别的事情了。当小A完成任务时,便报告给C经理这么一个过程。
在这个过程中,C经理(调用者)跟小A(实现者)说你什么完成便通知我相当于C经理在小A那里注册了一个回调函数(什么时候完成任务通知我)。当小A完成任务通知C经理这个过程便相当于条件触发,执行回调函数。

异步调用主要用于程序A在发生一定条件时,需要执行相应操作,但是它并不知道条件什么时候发生的场合。因此他要向能够捕获条件发生的程序B注册一个回调函数。当条件发生时,程序B便会调用先前程序A注册的回调函数。

上一实例的代码实现形式:
/*C经理.c*/

void report_me()            //回调函数
{
printf("The task has been completed.\n");
}

register(report_me);       //向小A注册回调函数

/*小A.c*/

void register(void (*f)())    //注册一个回调函数
{
func = f;
}
void exec_on_event(void)      //事件发生时执行回调函数
{
func();
}



TAG:

 

评分:0

我来说两句

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 54791
  • 日志数: 40
  • 建立时间: 2012-07-17
  • 更新时间: 2012-10-01

RSS订阅

Open Toolbar