回调函数 客官°小女子只卖身不卖艺 2021-09-30 11:56 587阅读 0赞 一、定义 什么是回调函数?它首先是一个函数,这是肯定的,我举个例子:有两个函数A和B,首先应用程序将A的地址告诉B,这称之为**注册回调函数**,B在收到外部某个命令的时候,可以根据B的地址来调用A,这个先被传入B,后面又被B调用的函数A就称之为**回调函数**。 这样看来,判断一个函数是不是回调函数是从它被调用的方式来定义的,那么B函数一般来说需要一个传入参数,参数类型是函数指针。 二、应用场景 有人可能会说,B想调用A直接在函数里面直接调用就好了,为什么先要把A的地址作为一个参数传给B这么麻烦呢? 我们可以设想这样一个生活场景: 商场里有一款商品卖的特别好,经常卖断货,许多客户都要求新货一到就马上联系他们,为了商场能联系上客户,客户们就把自己的联系方式告诉商场(**注册回调函数**),客户A把自己的手机号告诉了商场,客户B呢把自己的邮箱告诉了商场。等到新货到了,商场就打电话(调用**回调函数**)通知客户A,而通知客户B则通过发邮件(调用**回调函数**)。 这里我们可以看到,客户把自己的联系方式告诉商场,至于是什么联系方式商场并不关心,只要能联系上客户就行,这样就给客户很大的灵活性。 再看一个具体的应用场景: 一个管理USB接口的模块,这个模块会不停的检测USB接口是否有U盘插入。而当有U盘插入的这个事件发生时,不同的用户可能想干不同的事,比如有的用户想在屏幕上显示“有U盘插入了”,而有的用户就想让一个喇叭不停的响等等。那么这个时候用户只要把U盘插入响应函数的地址告诉模块(**注册回调函数**),等到模块检测到有U盘插入就去调用这个响应函数(调用**回调函数**),至于这个函数做些什么,模块并不关心,这就增加了用户的灵活性,实现用户想要的功能。 三、怎么用 从上面我们看到需要把回调函数的地址作为一个参数注册到模块中,这个函数地址其实就是个函数指针,既然要注册到模块中,这个回调函数必须以该模块认可的格式编写,说的比较抽象,下面举个例子说明下。 先写模块部分,构造一个结构体 1 typedef struct _CheckEvent() 2 { 3 int eventID; 4 BOOL (*Check)(void); 5 }CheckEvent; 上面的结构体中定义了一个函数指针Check,参数是void,函数类型是BOOL,这就要求用户定义的回调函数也必须是参数为void、类型为BOOL的函数。 接着定义一个CheckEvent的数组: 1 CheckEvent arrayCheckEvent[2]= 2 { 3 { 0, CheckEvent0},//注册回调函数CheckEvent0 4 { 1, CheckEvent1}//注册回调函数CheckEvent1 }; 编写模块主功能: 1 void Module(void) 2 { int index,id; 3 while(1) 4 { 5 id=GetEventID(); 7 for(index=0;index<2;index++) 8 { 9 if(id == arrayCheckEvent[index]. eventID)//当事件eventID发生时 10 arrayCheckEvent[index]. Check();//调用eventID对应的回调函数 11 } 12 } 13 } 应用程序要做的就是实现回调函数 BOOL CheckEvent0(void)和BOOL CheckEvent1(void)了,实现用户想要的功能,注意回调函数的参数和函数类型要和模块中定义的CheckEvent结构体中的函数指针定义的一致。 转载于:https://www.cnblogs.com/heart-flying/p/9300641.html
相关 回调函数 作者:桥头堡 链接:http://www.zhihu.com/question/19801131/answer/27459821 来源:知乎 著作权归作者所有,转载 清疚/ 2022年09月24日 11:26/ 0 赞/ 49 阅读
相关 回调函数 一、回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义 ╰+攻爆jí腚メ/ 2022年06月16日 23:37/ 0 赞/ 304 阅读
相关 回调函数 回调函数是一种函数指针的使用方式。 stdcall和cdecl的区别:这个问题涉及到函数调用的汇编知识,暂只需记住stdcall和cdecl的参数压栈顺序是相同的,参 傷城~/ 2022年06月12日 07:21/ 0 赞/ 313 阅读
相关 回调函数 作者:no.body 链接:https://www.zhihu.com/question/19801131/answer/27459821 来源:知乎 著作权归作者 ╰半夏微凉°/ 2022年06月11日 05:37/ 0 赞/ 68 阅读
相关 回调函数 转自: 回调函数 在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内某些代码( 朴灿烈づ我的快乐病毒、/ 2022年06月11日 05:36/ 0 赞/ 282 阅读
相关 回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实 青旅半醒/ 2022年06月02日 20:51/ 0 赞/ 317 阅读
相关 回调函数 转载自[https://zhidao.baidu.com/question/572699725.html][https_zhidao.baidu.com_question_57 水深无声/ 2021年12月12日 04:01/ 0 赞/ 489 阅读
相关 回调函数 作为JS的核心,回调函数和异步执行是紧密相关的,也是必须跨过去的一道个门槛。 那么究竟什么是回调函数(Callback),其实回调函数并不复杂,明白两个重点即可: 1. 函 桃扇骨/ 2021年11月13日 21:28/ 0 赞/ 547 阅读
相关 回调函数 一、定义 什么是回调函数?它首先是一个函数,这是肯定的,我举个例子:有两个函数A和B,首先应用程序将A的地址告诉B,这称之为注册回调函数,B在收到外部某个命令的时候,可以根据 客官°小女子只卖身不卖艺/ 2021年09月30日 11:56/ 0 赞/ 588 阅读
相关 回调与回调函数 回调与回调函数 回调 回调函数 回调 回调指的是某函数在执行的时候,由于某些原因,该函数被迫中止执行,交出当前线程的使用权,当前线程转而执行其它函 悠悠/ 2021年09月25日 04:26/ 0 赞/ 579 阅读
还没有评论,来说两句吧...