在计算机程序设计中,callback是指通过函数参数传递到其它代码的某一块可执行代码的引用。
callback机制允许了底层代码调用高层定义的子程序,而不必关心高层对callback函数的具体实现。

callback机制:
1. callback函数调用者定义一个函数原型,函数实现者在既定的函数原型下实现函数;
2. 函数实现者在初始化时将已经实现的callback函数的函数指针注册给callback函数调用者;
3. 在特定的事件或条件发生时,调用者使用函数指针调用该callback函数。

根据以上定义看起来,callback函数类似于中断一样:
当事件发生或条件满足时,就callback上去;
至于callback函数的实现者如何处理,那是callback函数自己的事,callback函数的调用者并不关心。
换言之,callback函数的调用者只负责通知,不负责具体处理。

所以,callback机制它能够实现调用者和被调用者的分离。
callback机制在多线程的异步处理中会被经常使用,
但要注意多线程之间传递指针时一定要小心。
详细可以参考下面这篇文章的分析,
http://blog.csdn.net/boyxulin1986/article/details/11819237
同时要说明一下,如果是跨线程的callback才需要去做线程切换动作。
原则是自己的事在自己的线程中去做。
如果函数的实现者和调用者是同一线程中的模块,那就不需要做线程切换了,
因为这相当于是一个线程内部的事。

callback函数是由开发者按照约定的原型进行定义的函数,函数的原型由调用者定义。
以下就是定义了一个具体的callback函数原型,
typedef int (*pfunc)(int value, void* p1, void* p2);

使用callback机制可以很容易的实现client/server程序模型。

callback函数学习(二)相关推荐

  1. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  2. Python学习 Day28 JS函数(二)

    JS函数(二) (一)return关键字 关键字return一般结合函数一起使用.而且需要注意,这个关键字一般只能在函数体中使用 作用: 1.函数体中如果遇见关键字return,函数体后面语句不再执行 ...

  3. loadrunner之 学习二:loadrunner函数

    学习二:loadrunner函数 一.基础函数 在VU左边导航栏中,有三个LR框架函数,分别是vuser_init(),Action(),vuser_end().这三个函数存在与任何Vuser类型的脚 ...

  4. excel高级函数_PowerQuery 进阶之 M 函数学习

    草色新雨中, 松声晚窗里. 之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作.虽然 PowerQuery 已经将大部分常用功能内置成到功能区.基本能完成我们大部分的报表自动化功能 ...

  5. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  6. Go 函数,包(二)

    #### Go 函数,包(二)***百丈峰,松如浪,地势坤,厚德载物之像*** 今天又到周五啦,你们有没有激动呢,反正我很激动,又有两天的自由了; 上一节我们学习了Go 的函数和包的一些知识 , 今天 ...

  7. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  8. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  9. OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()

    OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...

最新文章

  1. ios程序连接真机调试
  2. vue分页tbale小荔枝
  3. jquery如何获取checkbox,并判断是否选中
  4. 【开发软件】推荐一款MAC OS X 下php集成开发环境mamp
  5. 国科大高级人工智能6-GAN
  6. python编译成dll文件_用vc生成可被python调用的dll文件
  7. 【HANA系列】SAP HANA Studio出现Fetching Children...问题
  8. 百度DuerOS负责人景鲲晋升副总裁,继续向李彦宏汇报
  9. 学习python的第五天
  10. 昔年浅谈做害虫消杀防护的用什么推广效果好?
  11. 清华提出:用于细粒度实体分类的Prompt-Learning,并提出可训练Prompt模板
  12. 洛谷——P1507 NASA的食物计划
  13. java 回调函数实现_Java实现的回调函数
  14. EF 和 EF CORE 逆向生成实体类
  15. 深入了解Element Form表单动态验证问题
  16. win10和win11系统qq远程不能控制(点不动)的终极解决方法
  17. 申请公司苹果开发者账号-2020最新
  18. [通信原理实验]北京邮电大学信息工程专业
  19. 2.ZooKeeper分桶策略实现高性能的会话管理「第五章 ZooKeeper 原理」「架构之路ZooKeeper理论和实战」
  20. 企业应用软件商转型互联网的123

热门文章

  1. 如何开一个minecraft Java服务器
  2. 极值分析:分块极大值BLOCK-MAXIMA、阈值超额法、广义帕累托分布GPD拟合降雨数据时间序列...
  3. C/C++折半查找与哈希查找[2023-05-11]
  4. 【EmbeddedLinuxPrimer翻译】第一章:导论
  5. vue实现弹窗多表格
  6. 2022.08.10 走过的一瞬间风景,即美也有诗意,给大家分享一下。
  7. 通过Boomerang按计划在Gmail中发送或接收电子邮件(并且我们有邀请)
  8. react 必掌握的小知识
  9. js:面向对象编程,带你认识封装、继承和多态
  10. EasyX图形库的下载安装与Dev-C++配置