回调函数(callback)理解

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

个人总结:回调函数是用户提供给操作系统调用的,类似于中断处理函数(ISR),由于Windows的中断是由系统来处理的,所以当某个中断发生时,用户要进行中断服务就必须将中断处理函数写成回调函数。

转:http://blog.chinaunix.net/space.php?uid=13485119&do=blog&id=101182

···

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值