zoukankan      html  css  js  c++  java
  • 回调函数

    一、什么是回调

      软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。

    二、C语言中的回调

      回调在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针:

      void func(char *s); //函数原型
      void (*pfunc)(char *); //函数指针
    

      一般为了简化函数指针类型的变量定义,提高程序的可读性,我们需要把函数指针类型自定义一下。

      typedef void(*pcb)(char *);
    

      回调函数可以像普通函数一样被程序调用,但是只有它被当作函数参数给被调函数时才能称作回调函数。

      例:   

    void GetCallBack(pcb callback)
    {
      /*do something*/
    }
    用户在调用上面的函数时,需要自己实现一个pcb类型的回调函数:
    void fCallback(char *s) 
    {
      /* do something */
    } 
    然后,就可以直接把fCallback当作一个变量传递给GetCallBack,
    GetCallBack(fCallback);
    

      

  • 相关阅读:
    Sublime Text3 配置 Lua5.3.5开发环境
    Unity项目
    Unity项目
    C#简介
    Unity
    【数据结构与算法】分治思想经典题总结
    【数据结构与算法】数学题经典题总结
    【java I/O流总结】PrintWriter总结
    【java I/O流总结】基于源码比较FileReader和BufferReader
    【java I/O流总结】字符流文件读写
  • 原文地址:https://www.cnblogs.com/jiangyu0331/p/12001877.html
Copyright © 2011-2022 走看看