1.回调函数基本定义-

  • 什么是函数指针
    通俗来说,函数指针是一个指向特定函数的指针。函数的类型由其参数及返回类型共同决定,与函数具体名称无关。示例代码如下:
    int testFun1(int param1,long param2,float param3); //普通函数定义
    该函数的类型为int(int,long,float),该类型的函数指针可以定义为如下:
    int (*pTf)(int,long,float);

    注意:

    1.从上面的示例,可以看出,要声明一个函数指针,只需要将普通函数名变为指针,同时用()将指针名扩起来即可;

    2.()是必不可少的。int pTf(int,long,float)表示的是一个返回值为int的普通函数。

  • 什么是回调函数
    通俗来说,回调函数就是用来给别人调用的函数,函数的编写者只负责实现函数,不用去主动执行函数。下面举个通俗的例子来说明什么是回调函数。

    1. 拿移动公司的彩铃来说,用户可以定义彩铃,彩铃业务就是相当于回调函数;
    2. 用户可以定义彩铃的内容,即相当于可以实现回调函数的功能;
    3. 但是用户并不能直接使用具体的彩铃业务,移动公司会在来电时,直接播放用户选定的彩铃内容,即相当于调用回调函数。

2.回调函数基本形式

回调函数是通过函数指针来实现。具体的示例示例如下:

#include "stdafx.h"
#include <iostream>
using namespace std;typedef int(*pFun)(int);     //定义一个函数指针类型 //函数功能:回调函数测试函数
//参数:    pFun pCallback[IN]                     -- 函数指针,用于指针回调函数
//返回值:  无
void Caller(pFun pCallback)
{cout << "准备执行回调函数..." << endl;int ret = pCallback(1);cout << "函数处理结果:" << ret << endl;
}//函数功能:真正的回调函数
//参数:    int iParam[IN]                     -- 输入参数
//返回值:  int                                -- 执行结果
int realCallbackFun(int iParam)
{cout << "进入回调函数..." << endl;return iParam + 1;
}int main(int argc, char* argv[])
{Caller(realCallbackFun);getchar();return 0;
}

3.回调函数的应用场景

回调函数一般适合于以下几种场合:

  • 事件驱动机制
    为了简单说明该机制,我们假定有两个类,类A与类B。该模式的工作机制如下:
    1.类A提供一个回调函数F,该回调函数执行根据不同的参数,执行不同的动作;
    2.类A在初始化类B时,传入回调函数F的函数指针pF;
    3.类B根据需要在不同的情况下调用回调函数指针pF,这样就实现了类B来驱动类A,类A来响应类B的动作。

  • 通信协议的“推”模式
    在我们实际工作中,经常会遇到数据通信的问题。总体来说,两个对象要实现数据通信,有以下两种方式:
    1.“拉”模式
    在该模式下,假定对象A要从对象B中获取实时数据信息,“推”模式的工作机制如下:
    (1)对象A开启一个线程,该线程执行一个循环,每隔一定时间间隔,向对象B发出数据请求;
    (2)对象B一旦有新的信息,就利用对象B的数据请求,将信息发送给对象B。
    注意:该模式的主要问题是需要维护一个循环线程。时间间隔太长会导致,通信的实时性下降;时间间隔太短,会导致CPU浪费太多。
    2.“推”模式
    在该模式下,假定对象A要从对象B中获取实时数据信息,“推”模式的工作机制如下:
    (1)对象A在调用对象B时,向其传递一个回调函数;
    (2)对象B一旦有新的信息,就调用对象A传递过来的函数指针,将最新的信息发送给对象A。
    注意:该模式完美解决了“拉“模式产生的问题,不但保证了数据传输的实时性,而且降低了无用的CPU消耗。一般的通信协议,建议采用”推“模式。

回调函数基本介绍和基本使用场景相关推荐

  1. Js 箭头函数 详细介绍(多种使用场景差异,你学会了吗?)

    简要认识 箭头函数是在ES6中添加的一种规范,简化了匿名函数定义的写法. 基本格式 完整写法 let fn = (x,y) => {return x + y; }//function()写法 l ...

  2. 为什么要用回调函数?

    为什么要用回调函数? [问题点数:20分,结帖人wxf041041]点击打开链接 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 wxf041041 wxf041041 等 ...

  3. php获取回调url方法,php回调函数的实现方法介绍(代码)

    本篇文章给大家带来的内容是关于php回调函数的实现方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.名称id说明选项options 回调过滤器(callback)1024 ...

  4. Java 回调函数作用和使用场景

    1. 什么是回调函数  回调函数(callback Function),顾名思义,用于回调的函数. 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分, ...

  5. C语言回调函数 钩子函数,回调函数和钩子函数介绍

    编程分为两类:系统编程(system programming)和应用编程(application programming).所谓系统编程,简单来说,就是编写库:而应用编程就是利用写好的各种库来编写具某 ...

  6. 钩子函数介绍以及与回调函数的区别

    什么是钩子函数? 先来看一段百科:钩子函数是Windows消息处理机制的一部分,通过设置"钩子",应用程序可以在系统级对所有消息.事件进行过滤,访问在正常情况下无法访问的消息.钩子 ...

  7. 回调函数介绍和使用方法以及使用例子

    回调函数在日常开发中使用广泛,什么是回调函数,为什么要使用回调函数,如何使用回调函数,本文将结合一个例子说明. 什么是回调函数? 回调函数也是函数,通俗的来说回调函数是由开发者A定义,另个开发者B实现 ...

  8. Callback回调函数介绍(C语言)

    目录 1. 回调函数的定义 2. 为什么要用回调函数 3. 怎么用回调函数 3.1 怎么使用没有参数的回调函数 3.2 怎么使用带参数的回调函数 1. 回调函数的定义 最近在工作中经常用到回调函数ca ...

  9. 观察者设计模式二:回调函数

    在上篇博客中具体介绍了观察者设计模式在异步短信发送中的应用场景,但是,在具体的业务中短息发送使用那种方式则会令代码很不友好: 这里我使用的是回调函数的方式来实现这个业务需求: 在具体的业务场景中,我们 ...

最新文章

  1. mac android 真机调试
  2. 【知识星球】softmax损失相关的小问题
  3. Sap权限相关设置、控制及传输
  4. 发送消息时,设定TTL
  5. 手机版python3.6.6的requests库下载_Python爬虫之Python3.6 Requests库的基本使用方法
  6. win10控制视频声音大小
  7. chrome 开发者工具,查看元素 hover 样式
  8. 【codevs1230】元素查找,弱弱的二分查找
  9. 方差,平方差,标准差的区别是什么?
  10. Linux 服务器 监控命令
  11. 爱奇艺发布新款电视果,AI 语音控制,4G、WiFi 双模式投屏!
  12. linux 路由添加
  13. MySQL5.7.的备份恢复方案。
  14. vscode php断点调试,如何使用vscode断点调试laravel
  15. IDEA-------Webstorm主题推荐
  16. Google的黑科技你知道那些?
  17. 软考高级 真题 2015年上半年 信息系统项目管理师 综合知识
  18. 使用Validation框架检查数据格式
  19. iOS-APP包的瘦身之旅(从116M到现在的36M的减肥之路)
  20. Excel 统计起止时间

热门文章

  1. 如何成为一个高级java程序员
  2. 一.JavaWeb学习路线
  3. 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇7、大规模影像管理
  4. 实现网站对IP地址的限制访问
  5. Spring aop开发步骤
  6. 谁是程序员的祖师爷?
  7. webpack(7)_CSS_使用style-loader和css-loader
  8. debconf-set-selections mysql_在Ubuntu上的MySQL脚本安装
  9. 如何检查后台服务(Android的Service类)是否正在运行?
  10. Jarvis oj level3