谁能通俗的解释回调函数?

来源:百度知道 编辑:UC知道 时间:2024/05/27 23:56:29
我实在不理解为什么要回调,怎么回调,怎么执行过程.跪求高手前辈指点啊,或者有什么这方面的书籍可以推荐的,请赐教.分我不在乎,问题能解决我必有回报!先谢过了
我还是不明白,这与直接调用另外一个函数有什么区别,为什么非得"回调",
假设,A函数调用了一个回调函数B,,然后等B执行完了再反过来调用A.
这样还不如在A函数里直接调用B函数呢,呵呵,晚辈一时心急,请各位不惜赐教,分是无所谓的

我又有另外一个疑问了,如果说"A:"B,你去干f。干好了叫我干g。"",那为什么非得把函数用地址传进去呢?直接在f函数里调用不就OK了么,何必要绕个弯子

多谢" BlueWanderer"前辈的指点,这样吧,如果你能给我 推荐些关于这类似的问题的书,我就再给你加50分.如何?

前辈,那有没有书能详细的介绍windows消息机制之类的比较好的书 呢

callback这个词本意是打电话对方不在,通过某种方法让那个人在的时候给你打回来。

void f() { ... } 调用这个函数话...和回调没有任何关系。就相当于A:"B,你去干f。"

void f(int (*g)()) { ... g(); } 这个函数就带有回调的特征。调用的时候好像 A:"B,你去干f。干好了叫我干g。"

也就是调用方留一个让被调用方在特定时候通知他的线索,对他进行“回调”。

----

接着上面说,f这个工作要求是干完以后干一件事g。但是这个g并不是f自己规定的,是在调用f的时候再告诉f的。比如你可以让B在完成的时候,什么也不干;或者叫你一声;或者让你干另外一件事。就是说g这个工作本身就是个变量。

----

如果不作为参数提供,g就成了f固定的一部分。A直接说“你去干f”不就是了。作为参数的意义就在于,这个g可以随意改变。

----

基本上不可能有书会去具体讲回调函数。回调只是一个很基本的函数指针的使用。

什么是回调函数?
首先做一个形象的比喻:
你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机是我通知你的手段,它就是回叫函数,也叫回调函数
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,