1. 首页
  2. 直播平台

什么是回调函数?

那么函数指针的声明方法如下:void(*)();让我们来分析一下,左边圆括弧中的星号是函数指针声明的关键。

换句话说,程序可以在运行时,通过登记不同的回调函数,来决定、改变中间函数的行为。

同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口。

例如,有时要在A程序中设置一个计时器,每到一定时间,A程序会得到相应的通知,但通知机制的实现者对A程序一无所知。

假如进程B收到进程A发来的消息,启动了一段代码,其中又向进程A发送消息,这就形成了回调。

话虽这样说,此调用机制并非完美。

现代编程方式总是想法把地址隐藏起来(隐藏比较彻底的如VB和Java),其代价是降低了程序效率。

如果make_youtiao这个函数执行的很快并可以立即返回,那么B小组的同学只需要:1.调用make_youtiao2.等待该函数执行完成3.该函数执行完后继续后续流程从程序执行的角度看这个过程是这样的:1.保存当前被执行函数的上下文2.开始执行make_youtiao这个函数3.make_youtiao执行完后,控制转回到调用函数中

!make_youtiao这个函数是怎么实现的呢,很简单:voidmake_youtiao(intnum,funccall_back));我想不需要再强调什么了吧,你觉得这两种写法哪个更容易理解,代码更容易维护呢?博主有幸曾经维护过这种类型的代码,不得不说每次增加新功能的时候恨不得自己化为两个分身,一个不得不去重读一边代码;另一个在一旁骂自己为什么当初选择维护这个项目。

为了弄明白这种函数的奥妙,首先提出三个问题:1\\.回调函数是什么东西?2\\.回调函数怎么开发,怎么使用?3\\.回调函数的作用,应该在什么情况下使用?带着问题来学习,有目的!呵呵,个人经验。

因此,库函数提供一个函数指针作为入口参数,主程序将回调函数像参数一样传入库函数。

利用消息也可以构成狭义回调。

要实现回调,必须首先定义函数指针。

借堆栈保护现场真是一项绝妙的发明,它使调用者和被调者可以互不相识,于是才有了后来的函数和构件。

WINDOWS回调函数:永远不会被程序中的其他函数或子程序调用。

如果没有提供回调函数,它还会把一个消息发往程序的消息队列。

只能由操作系统调用。

系统程序员会给自己写的库留下一些接口,即API(applicationprogramminginterface,应用编程接口),以供应用程序员使用。

注意本例中还没有创建指针变量-只是声明了变量类型。

**·END·**!(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzhhMmY2ZTFlMTY3YjYyNTc1ZWY5MmJmMjBmMjU2YzZkLmdpZg)****!(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzU1YmY1Y2YyZDVhOTQyNGM1ODk0YjYzOTYzYTQ3ODkxLmdpZg),**概念**回调函数就是一个通过函数指针调用的函数。

定义主函数的时候,我们让代码先去执行callback回调函数,但输出结果却是后输出回调函数的内容。

C++中一般要求在回调函数前加CALLBACK(相当于FARPASCAL),这主要是说明该函数的调用方式。

评分 0, 满分 5 星
0
0
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:http://www.supreme-men.com/zbpt/5.html [复制] (转载时请注明本文出处及文章链接)
  • 本文无相关文章
上一篇:
:下一篇

发表评论

gravatar

沙发空缺中,还不快抢~