回调函数听起来是个非常专业的名称,让人产生一种敬畏的感觉。这里试图做一个说明,如果没有看懂,原因只是我的表达能力,而非你的理解能力。
1、回调函数是什么?
从c的角度来看,回调函数从基本上,是一个指针,更确切的说,是一个函数指针。
2、回调函数用来做什么?
既然它是一个函数指针,那么显然,函数指针用来做什么,回调函数自然可以有一份。更进一步,指针用来做什么的,函数指针也有一份。
3、为什么要使用回调函数?
和为什么要使用指针一样,使用回调函数的主要目的是为了达到所谓的“灵活性”。
4、回调函数的使用场合
既然是函数,那么必然有实现的地方和调用的地方。
回调函数调用的地方应该大多数是提供服务的代码群。如基础界面提供者。
反之,回调实现的地方大部分是使用服务的代码群。如应用界面实现者。
回调函数在可视化控件的开发中有大量的使用,windows本身也大量使用了回调函数。
5、例子
比比皆是。
比如通用的按键控制,其按键实现的代码中有如何画按键,如何在鼠标按下时显示一个向下的动作,如在需要隐藏的时候消息,这些都是按键控制自身实现的代码,是否隐藏作为一个属性,由调用者设置,按键控制的代码根据调用者设置的不同属性,采用不同的行为。
自然,调用者使用按键不是为了设置它的属性来玩的,调用者是为了做事情的,那么非常显然的,调用者希望在按键按下时完成一些事情,比如开始格式化硬盘,这些代码当然由调用者来写,问题在于如何让调用者知道按键被按下了?
方法1:设置属性,由调用者自己查看。在按键属性中增加一个是否按下的属性,这个属性和其他属性不同,是由按键控制本身的代码来操作的,当用户按下按键,那么这个属性改变。调用者定时或者偶然查看这个属性,再决定自己的行为。
如果把调用者看做领导,按键控制看做部下,那么这样的部下显然无法让领导满意,冒号们已经很忙了,还要不断抽时间四处查阅属下?
方法2:发消息。既然按键控制不应该消极怠工,那么无论有什么事情就赶紧汇报吧。向调用者发送一个消息开起来是很勤快的做法。
可是冒号还是不满意,不满意的地方在于按键控制仍然缺乏主动性,只是简单的把消息一发送,就不管不顾了,剩下的事情全交给领导,真不知道到底谁是领导了。虽然现在欠债的是大爷,可领导永远是领导。
方法3:回调函数。领导需要布置任务,比如税务局的来了财务的赶紧给假账本,研发的就一问三不知。对于按键来说,这个按键按下和那个按键按下自
然分工也不同,按键提供一个回调函数来接受指令,按下时是赶紧给假账本还是一问三不知,全有调用者说了算。按键必须保证在按键按下时,这些指令,也就是回
调函数得到恰当的运行。
文章评论(0条评论)
登录后参与讨论