现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

回调函数与钩子函数的区别

2012-11-25 08:18 工业·编程 ⁄ 共 1019字 ⁄ 字号 暂无评论

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的中断是由系统来处理的,所以当某个中断发生时,用户要进行中断服务就必须将中断处理函数写成回调函数。

给我留言

留言无头像?