Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88637
  • 博文数量: 23
  • 博客积分: 870
  • 博客等级: 准尉
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 16:52
文章存档

2011年(1)

2010年(1)

2009年(21)

我的朋友

分类: 嵌入式

2009-09-04 21:28:53

回调函数(callback)理解

问:什么是回调函数,回调函数和钩子函数的区别?
解释:
A:回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。为此,你需要做三件事:1,声明;2,定义;3,设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统调用。
声明和定义时应注意:回调函数由系统调用,所以可以认为它属于WINDOWS系统。不要把它当作你的某个类的成员函数。
BA说回调函数属于WINDOWS系统。我觉得不应该说回调函数是属于系统的。应该说是程序把这段代码的触发交由系统来做。而这种做法是WINDOWS提供的处理机制吧,因为消息是系统一手掌握着的,由系统来调用我们的程序对消息的处理部分,这样子会比较方便。不然我们又得花力气去读消息列表了。
C:我研习windows开发多年,认为以上几位的回答都是概念上的错误。我想先看看一般的函数为什么不是callback的吧。我们自己设计的函数往往是用来实现特定功能的函数,为了实现一些功能,我们可能要在函数中调用操作系统提供的服务,例如textout(),我们的自己设计的函数是用来由我们的主程序调用的。这就是一般意义上的函数,如下所示:
void   fun1();  
  main()  
  {  
            .......;  
            fun1();  
            .......;  
  }  
  void   fun1()  
  {  
          .....  
          .....  
  }  
   
你可以看到,在主程序中一定会有对我写的函数的调用; callback函数与此不同,它不是由我们的主程序来调用的,它是为操作系统准备的,也就是说,我们的主程序中绝对看不到对callback函数的调用,你想想,你肯定没有见过在WinMain()中对winproc的调用。  
回调的意思就是反过来调用,因为我们习惯了从我们的程序中调用操作系统的服务,却对操作系统调用我们的函数不习惯,所以我们写的为操作系统调用的函数叫回调函数。
这类函数主要是我们为WINDOWS编写的窗口处理函数,当某个消息到达时,操作系统会调用我们写的回调函数,所以我们看不到主程序中对回调函数的调用。
个人总结:回调函数是用户提供给操作系统调用的,类似于中断处理函数(ISR),由于Windows的中断是由系统来处理的,所以当某个中断发生时,用户要进行中断服务就必须将中断处理函数写成回调函数。
阅读(5042) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~