**四无题**软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

绝大多数情况下,这个调用者可以和程序的主函数等同起来,但为了表示区别,我这里把它称为起始函数(如上面的代码中注释所示。

回调函数可以看成,让别人做事,传进去的额外信息。

上面所举排序函数一例,可以把回调函数地址换成窗口handle。

例如:voidfunc()EnumChildWindows的第二个参数就是个函数指针,这个函数会被EnumChildWindows调用,但你不知道它何时调用,代码中传入是定义好的EnumChildProc这个函数,如何控制这个回调函数行为就是你的事情了,这里的代码是获取每个子窗口的标题阅读(1984)|评论(0)|转发(0)|,关于回调函数到底是什么,已经困扰了我很久了~在知乎上看到几位大神的帖子,才恍然大悟>作者:no.body>链接:https://www.zhihu.com/question/19801131/answer/27459821>来源:知乎>作者:常溪玲>链接:https://www.zhihu.com/question/19801131/answer/13005983>来源:知乎**首先要明确的一点是,函数也可以作为函数的参数来传递**好了,有了这个概念我们来说明回调函数到底是怎么回事**首先至少要有3种类型的函数**接下来我们一起来看下示例代码:!/usr/bin/envpython3-*-coding:UTF-8-*-回调函数1defcallback1(x):returnx*2回调函数2defcallback2(x):returnx**2中间函数defmiddle(x,func):return100+func(x)主函数defmain():x=1a=middle(x,callback1)print(a)b=middle(x,callback2)print(b)c=middle(x,lambdax:x+2)print(c)main()运行结果:102101103**代码看懂以后我们接下来分析一下代码的逻辑**首先我们在主函数执行过程中需要用到一个功能`x*2`,而`callback1`函数就提供这个功能,我们就把这个函数称之为`回调函数`(至于为什么要叫回调函数,不能叫别的呢?其实这只是人为规定的一个名字。

在部分资料上,大量讨论了回调函数怎么被调用,到底被谁调用,还有好多的图形,我认为都没有看到问题的本质。

,回调函数、消息和事件例程调用(calling)机制从汇编时代起已经大量使用:准备一段现成的代码,调用者可以随时跳转至此段代码的起始地址,执行完后再返回跳转时的后续地址。

我所了解的会产生异步执行的操作大概有以下几种:定时器、建立网络连接、读取网络流数据、向文件写入数据、Ajax提交、请求数据库服务,等等。

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

函数之类本是为调用者准备的美餐,其烹制者应对食客了如指掌,但实情并非如此。

所谓系统编程,简单来说,就是编写**库**;而应用编程就是利用写好的各种库来编写具某种功用的程序,也就是**应用**。

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

排序函数借此调用者提供的函数来比较大小,借指针传递参数,可以全然不管所比较的数据类型。

其实,单独给出一个函数是看不出来它是不是回调函数的。

但同时它也有参数,且传进来的参数是库开发方提供的数据,这里我们又可以总结一句话:回调函数调用了库开发方的数据。

本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。

除了上述情况,在C++中应使用虚拟方法或函数符(functor),而不是回调函数。

实际上,API使用一个回调函数SetTimer()来通知计时器。

另外,回调实际上有两种:阻塞式回调和延迟式回调。

如下图所示(图片来源:维基百科):

结果2!在这里插入图片描述(https://img-blog.csdnimg.cn/20200312215820623.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmd5YWJpbmcyMDIw,size_16,color_FFFFFF,t_70),概念:回调就是一种利用函数指针进行函数调用的过程。

这个被传入的、后又被调用的函数就称为**回调函数**(callbackfunction。