[个人见解]回调函数

开发语言C++

以下是个人对回调函数的见解(有错误请指正):

小白入门:

回调函数主要作用还是信息交互,主要作用于异步情况下。

具体例如:你拿到了别人的SDK,里面包含一个动态库,一个头文件。现在要你去调用它的某个异步函数(比如异步登录函数)。

那么你可能会觉得,如果调用的是同步函数,就会在这个函数结束时(可能成功可能出错)立马得到返回值。从而可以判断出这次调用是否失败或成功,在你看来程序是顺序执行的因此很好理解,干嘛用异步呢?

但是如果它的同步函数在执行中出现了等待(比如网络延迟需要等待,或者是由于你使用不当出了bug等,这些都是你不能确定的,你不知道它的源码。)那么对你的程序将造成同等的影响,这可能会在一个网络服务程序中大大降低效率。因此有必要使用异步函数来弥补。

到这里,你可能又会有疑惑:要是异步的函数(你的程序在执行了这个异步函数后会继续执行下去,可以理解成这个异步函数相当于创建了个新线程,因此你无需等待你想要的的结果)那么要怎么得到返回呢?这时,回调函数出现了。

他会给你提供一个函数入口,你可以将你的函数传递给他(函数作参数),然后它会在它的那个函数(你刚刚调用的异步函数)结束时调用你传入的这个函数,以此来达到信息传递的作用。说白了就是你按照人家的那个回调函数原型 “实例化” 一个函数,然后把这个函数塞人家里面,人家就会在该调用的时候(下边讲)调用你的那个函数,注意人家是直接调用你的这个函数(之前有说,相当于一个新的线程),因此你的这个函数的执行可能会与你的 “主进程” 冲突(简单的线程冲突问题),记得分析流程加锁来保证线程安全。

至于什么叫 “该调用的时候” 呢?这个有很多的,如:你登录,登陆成功会回调,失败也会回调。你执行某个操作,可能失败的花样很多,比如参数错误,网络不通等等,这些时候都可以引起回调。回调多用于信息传递,所以有任何信息需要传递的都可以使用回调函数解决。那么你可能会说:我一个程序必然会有各种各样的信息需要传递,那岂不是要很多回调函数?

这个问题难以回答,具体还要看你的想法,比如你可以把登录登出使用同一回调函数,因为他们传递同样的消息:用户名密码(简单例子)。但更常用的是在错误回调方面,因为错误通常只需要传递一个字符串或一个错误码。因此,为你的程序设置一个错误回调函数也许是不错的选择(如果有必要的话)(错误码很常见,可以根据人家的错误回调函数来比对人家的开发手册,从而分析错误的原由)。

以上是个非常简单、普通且常见的例子。(???回调函数还有其他用法吗???

花里胡哨的用法其实很多(就像 void * 一样耐人寻味   笑

待续。。。         一般有这俩字的基本就是终结了

发布了13 篇原创文章 · 获赞 17 · 访问量 1493

猜你喜欢

转载自blog.csdn.net/LucifeR_Shun/article/details/103355660