回调函数和钩子函数的理解

 首先:回调函数和钩子函数不是对立的。

1、回调函数 所谓回调函数,一般就是把函数的地址作为参数传进去,让调用的函数在内部可以调用这个函数,调用完后返回,强调调用和返回,是一种灵活的指向。

例子:定义函数指针 typedef int (*Fun)(int, int);

int add(int a, int b){...};

int sub(int a, int b){...};

void cal(int a, int b, Fun p){...};

当我们调用cal(x, y, add)或者cal(x, y, sub),目的是计算结果

2、钩子函数 钩子函数,严格算起来,也算是回调函数的一种,是一种过程监控,是回调函数的一种应用形式。钩子函数主要是针对的过程截取的,当你使用了钩子之后,执行某个过程,如上电启动bootload,那么系统会把bootload当做一个过程,对应的预留一定会执行的bootloader_before_init和bootloader_after_init作为钩子函数,开发人员可以在bootload_before或者after中带入你想要的功能函数(如上面写的计算),当然也可以不带入任何函数。 即原本是:系统-->目标函数 使用钩子就变成:系统-->你写的回调函数-->目标函数

再举个例子例如:在RTOS里面的钩子函数

  • 钩子函数有要求,
    ①允许应用程序设计人员添加后台功能没有单独任务的开销
    ②在任何情况下都不能,调用可能阻塞的函数,必须快进快出
  • 回调函数
    在按键注册机制里面,按键按下以后,我们都是调用的是回调函数。这个时候是处理按键的函数,这个是目的了。
  • 小结:钩子函数是特殊的回调函数(运用了回调的思想),但回调不一定就是钩子函数。

总结,钩子函数和回调函数的区别在于它们被调用的时机和方式。钩子函数是由系统自动调用,而回调函数是更多强调程序员显式调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值