回调函数callback的做用

查阅了网上的一些内容,本身总结了一下,算是比较全面了。html

定义:一个函数指针做为另外一个函数A()的参数被调用时,它是回调函数。编程

A(int m, int n, bool * f(m,n))多线程

1. 既然是函数的参数,就具有了扩展性和代码重用的做用,由于形参不变,实参是可变的。因此调用时,能够A(x,y,B),也能够A(x,y,C),这里B和C都是回调函数,有点像虚函数。(B和C能够实现不一样的功能,或以不一样的方式实现)框架

----场景:代码重用。A(x, y, isGreater), A(x, y , isSmaller)异步

2. 在定义A()时,甚至不须要知道实际的被调函数的名字,只要知道这个接口的格式,即参数,返回值,实现功能。因此甚至在肯定被调函数如何实现以前,只要约定好接口和功能,就能够进行A()的定义工做。(实现相同的功能)函数

----场景:框架编程,并行工做。业务流程步骤编排(无论具体实现)。url

A(bool * f())spa

3. 甚至被调函数f()到底实现什么功能,也是能够不定义的。只是在A里面规定好条件触发,将具体作什么的决定权交给用户线程

 ----场景:事件,通知。指针

我猜OnTimer()应当就是一个回调函数,开放给用户自定义动做。整个定时器的机制已是预约义好的。

main函数其实也是。都是事件机制。

4. 结合多线程异步使用。

----场景:工做继续进行,主函数先结束。

void  A(url, call)
{
      开启url线程,传入call
      函数自己返回.
}

 5.结合延迟函数。

void  A(call)
{
      setTimeout(call, 10000)
      函数自己返回.
}

 

其实叫回调函数总让人有些难以理解,直接叫被调函数就得了。

callback不少人都会举的一个例子是回家后打电话,这个例子其实并不清晰,如何将这个例子的元素对应到函数上面?我以为没必要深究,认识到callback自己隐含了延迟,触发,自定义的意义便可,对应了上面3,4,5的做用,可能这也是应用最广的场合了。

引用这个文章的一句话(https://www.cnblogs.com/moxiaowohuwei/p/8438236.html):

因此回调与同步、异步并无直接的联系,回调只是一种实现方式,既能够有同步回调,也能够有异步回调,还能够有事件处理回调和延迟函数回调,这些在咱们工做中有不少的使用场景。因此其实并非咱们不认识回调函数,而是咱们都萦绕在了这个“callback“ 这个词上,当你在一个函数中看到它是就会困惑,其实它只是一个形参名字而已

相关文章
相关标签/搜索