手把手教你写回调函数

                                        手把手教你写回调函数

 

 

 

手把手教你写回调函数手把手教你写回调函数源代码

 

回调函数的主要功能就是提供统一的接口以及事件的通知。如果你是从事middleware,框架,提供API编程的,那么你肯定少不了要使用回调函数。

所谓提供统一接口或者事件的通知即:当发生某一事件或者出现某一个状态之后必定会进行某种操作。但是这个操作又不能写死,不同的环境不同的程序会有不同的实现,也就是说提供接口的人不想把逻辑写死,而是由调用接口的人来实现逻辑。这也就是回调函数的主要功能。

 

 

回调函数,唯一途径就是传递函数指针。通过这个函数指针来调用真正的函数。

 

 

下面使用代码说明究竟如何实现回调函数,并通过这个例子来说明回调函数的作用:

 

 

/** filename: mytimer.h description: 这里我用一个闹钟静态库mytimer.a来演示回调函数的实现方法 */ #ifndef MYTIMER_H #define MYTIMER_H typedef void (*tmfun)(tumfun ); typedef struct{ tmfun t_fun; }tmhandle; static tmhandle tmstruct; extern void starttimer(int intercal); extern void registtimer(tumfun f);

 

 

/** filename: mytimer.c description: */ /** name: registtimer description: 注册闹钟处理函数。由于闹钟时间到之后,不同的人处理函数不同 所以,这里只提供接口,并不实现处理函数逻辑。 调用接口者需要自己实现处理函数,并注册启动闹钟 */ void registtimer(tmfun f){ tmstruct.t fun = f; } /** name; starttimer description: 根据参数设定时间并启动定时器 */ void starttimer(int interval){ int tmpi = 0; int fixtim = 500000000; int tmpFix = 0; for(tmpi;tmpi<=interval;tmpi++) for(tmpFix;tmpFix<=fixtim*2;tmpFix++); (*tmstruct.t_fun)(); }

 

以上是静态库的全部代码

Linux下输入以下命令制作动态库:

$ gcc -c mytimer.c $ ar -rc libmytimer.a mytimer.o

 

 

 

测试程序:

/** filename: testtimer.c description: 对接口进行测试,调用静态库 */ #include <stdio.h> #include <unistd.h> #include "mytimer.h" /** name:handler description:闹钟处理函数,即回调函数 */ void handle(){ printf("Hi Legend, I am a callback/n"); } int main(int argc, char **argv){ registtimer(&handle);//对闹钟处理函数进行注册 starttimer(5); return 0; }

 

 

将上面静态库头文件mytimer.h, libmytimer.a和testtimer.c放到同一个文件夹下面

然后输入以下命令:

$ gcc -o testtimer -L./ testtimer.c -lmytimer

 

然后得到的testtimer就是可执行程序。

 

 

 

手把手教你写回调函数手把手教你写回电函数源代码

 

 

 


版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/12/31/6110811.aspx
并请联系谭海燕本人或者前往谭海燕个人主页留言

 

 

 

上一篇:js的全部替换函数replaceAll


下一篇:《Hack与HHVM权威指南》——1.3.1 函数的返回类型