如果把函数指针传递给另一个函数(调用者),当调用者执行时,函数指针所指的函数也被执行。被调用的函数就是回调函数。

回调函数实现的机制是

1、定义一个回调函数;

 2、提供函数实现的一方在初始化的时候,通过注册函数 向调用者(管理单元/调度函数)注册回调函数的函数指针。

 3、当特定的事件发生时候,调用者使用函数指针调用回调函数对事件进行处理。

举例:

Quagga0.9.22中OSPF注册新建接口事件回调函数(省略了无关语句):

定义回调函数:

int ospf_if_new_hook (struct interface *ifp){函数定义}

定义存储回调函数的全局变量(每个上层协议进程一个):

struct if_master{

int (*if_new_hook) (struct interface *);

} if_master;

定义注册函数:

void if_add_hook (int type, int (*func)(struct interface *ifp)){ if_master.if_new_hook = func;}

注册回调函数:

if_add_hook (IF_NEW_HOOK, ospf_if_new_hook);

定义调用者函数:

struct interface * if_create (const char *name, int namelen){(*if_master.if_new_hook) (ifp);}

效果:每当有新建接口事件时,就会执行ospf_if_new_hook()。

回调函数callback function的机制及使用举例相关推荐

  1. alert 回调_JavaScript中到底什么时候回调函数Callback

    什么是回调函数Callback 简单的理解:回调函数是在另一个函数执行完毕后执行的函数 - 因此名称为'call back'. 复杂的理解:在JavaScript中,函数是对象.因此,函数可以将函数作 ...

  2. mysql.js回调函数_js回调函数(callback)

    Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...

  3. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  4. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  5. JS回调函数(callback)

    在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({url:"test.json",type: "GET", ...

  6. linux callback函数,C++回调函数(callback)的使用

    什么是回调函数(callback) 模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让 ...

  7. C++回调函数(callback)的使用

    什么是回调函数(callback)      模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什 ...

  8. C语言 回调函数 callback - C语言零基础入门教程

    目录 一.回调函数原理 二.回调函数简介 1.函数指针 2.指针函数 3.回调函数解释 三.回调函数实战 四.回调函数使用总结 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ...

  9. 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...

最新文章

  1. Matlab姿态表示
  2. 土壤生物和生化专业委员会暨土壤生物与土壤健康研讨会(杭州5月8-11)
  3. TCP之深入浅出send和recv
  4. MM中如何更改物料的评估类
  5. php 枚举cookie内容,php如何修改cookie内容?
  6. jvm_虚拟机组成部分概述
  7. js定位div坐标存入mysql_JavaScript与Div 对层定位和移动获得坐标
  8. select怎么设置默认值_20200817:详细说下数据倾斜怎么解决?
  9. 软件测试 学习之路 linux 基础命令 (三)
  10. 无法从计算机验证正在安装驱动,如何修复正在安装的驱动程序未在英特尔计算机上为此计算机验证 | MOS86...
  11. 不搞数字货币的科技巨头们,在区块链的布局上有这三个方向
  12. 2022,微博稳了吗?
  13. JAVA分布式架构设计实例
  14. java 写代码求导_OO_JAVA_表达式求导
  15. 从新华字典释义的角度理解springboot中controller、service、dao各自的职责
  16. pythonGUI实现照片或证件照迅速更换自定义背景底色
  17. win10下的VMware还原网络设置,无法创建VMware网络适配器解决办法
  18. 时光流逝我慢慢明白是什么
  19. java字符串--数组(相互转化)
  20. NodeJS相关笔记(一)

热门文章

  1. springboot批量更新实体_Spring Batch批量处理支付宝账单实践-基础篇
  2. css实现京东的价格标签
  3. 在服务器centos 6.4上面安装nginx支持hls和Feng支持rtsp流协议
  4. 一起读Java编程思想(2)---构造器的初始化与清理
  5. 硬件环境对系统性能的影响
  6. 如何在 Exchange Online 中对指定邮箱账户启用 SMTP 基本身份认证?
  7. 【踩坑】ckeditor5缩进功能无法直接使用的问题解决,以及首行缩进功能
  8. 鬼才|闲鱼PMO的年终总结
  9. UE4 | 蓝图 | 闪现和TP的实现
  10. while(1) 什么意思 while(i--)什么意思?