手把手教你写回调函数

简介:

                                        手把手教你写回调函数

 

 

 

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

 

回调函数的主要功能就是提供统一的接口以及事件的通知。如果你是从事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
并请联系谭海燕本人或者前往谭海燕个人主页留言

 

 

 

目录
相关文章
|
8月前
|
存储
【C进阶】回调函数(指针进阶2,详解,小白必看)(上)
【C进阶】回调函数(指针进阶2,详解,小白必看)(上)
|
8月前
【C进阶】回调函数(指针进阶2,详解,小白必看)(中)
【C进阶】回调函数(指针进阶2,详解,小白必看)(中)
|
10月前
|
前端开发
如何写一个简单的前端回调函数
如何写一个简单的前端回调函数
44 0
|
10月前
|
前端开发
前端学习笔记202306学习笔记第四十二天-promise-then的返回值3
前端学习笔记202306学习笔记第四十二天-promise-then的返回值3
29 0
|
8月前
|
索引
【C进阶】回调函数(指针进阶2,详解,小白必看)(下)
【C进阶】回调函数(指针进阶2,详解,小白必看)(下)
|
10月前
|
前端开发
前端学习笔记202306学习笔记第四十二天-promise-then的返回值2
前端学习笔记202306学习笔记第四十二天-promise-then的返回值2
32 0
|
10月前
|
前端开发
前端学习笔记202306学习笔记第四十二天-promise的基本使用和状态2
前端学习笔记202306学习笔记第四十二天-promise的基本使用和状态2
31 0
|
10月前
|
前端开发
前端学习笔记202306学习笔记第四十二天-promise的基本使用和状态1
前端学习笔记202306学习笔记第四十二天-promise的基本使用和状态1
38 0
|
10月前
|
前端开发
前端学习笔记202306学习笔记第四十二天-promise-then的返回值3
前端学习笔记202306学习笔记第四十二天-promise-then的返回值3
22 0
|
消息中间件 JavaScript 前端开发
postMessage踩坑实践
在低代码编辑器中进行页面预览常常不得不用到iframe进行外链的url引入,这就涉及到了预览页面与编辑器页面数据通信传值的问题,常常用到的方案就是postMessage传值,而postMessage本身在eventloop中也是一个宏任务,就会涉及到浏览器消息队列处理的问题,本文旨在针对项目中的postMessage的相关踩坑实践进行总结,也为想要使用postMessage传递数据的童鞋提供一些避坑思路。
88 0