“回调机制”是window 在执行某个API函数的过程中,调用指定的一个函数(回调函数)。
比如:你 有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好 了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回 叫,手机是我通知你的手段,它就是回叫函数,也叫回调函数(Callback Function)。
简单说就是,由程序员编写的,给windows系统(API)调用的函数。 也就是说,函数的功能有你定,调用有windows系统(API)调用。回调函数就是通过函数的指针来调用的函数。对于一个传递给其他函数的参数,如果你传递的是一个函数的指针(也就是地址),当这个指针被用来调用这个函数时,就可以说是构造了一个回调函数。就是你把自定义函数地址给别人,别人调用你的函数。回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。
1. 回调函数是由开发者按照一定的原型进行定义的函
2. 回调函数并不由开发者直接调用执行
3 .回调函数通常作为参数传递给系统API,由该API来调用。
4. 回调函数可能被系统API调用一次,也可能被循环调用多次。
回调函数主要用于一些比较费时的操作,或响应不知道何时将会发生的事件,回调函数提供了一种异 步的机制,相对于同步执行,提高了效率.前者的例子如WriteFileEx,ReadFileEx等,函数的最后一个参数是一个回调函数的指针,程序中 调用WriteFileEx以后,就直接返回了,可以继续进行其他工作,系统在读写操作完成后通知程序作善后处理.后者的例子就是windows的事件机 制回调函数的另一个用途,是用于一些枚举函数,如EnumDisplayModes等,每找到一种支持的显示模式,就通知回调函数,由回调函数具体处理, 这是因为 EnumDisplayModes本身并不知道用户要如何处理.能,用户提供回调函数,定制系统的功能,这样,不同的用户提供不同的回调函数,可以使系统 具有不同的功能.这就是所谓的plugin.使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地 址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。至于如 何定义回调函数,跟具体使用的API函数有关,一般在帮助中有说明回调函数的参数和返回值等。
1。比如在内核编程中,驱动程序就要提供一些回调函数,当一个设备的数据读写完成后,让系统调用这些回调函数来执行一些后续工作。
2。回调函数和其他函数没什么区别,只是有固定的参数和调用约定,比如windows的回掉函 数都要用stdcall. 参数是由调用这个回调函数的函数传递的,当然要规定好参数格式。使用很简单,就是传递这个回调函数的地址给调用的函数作为一个参数。比如创建线程的时候就 是这样的 。
3。回调函数的使用主要在于windows原有的API函数,但对于用户的自定义的调用函数一般在于动态连接库中。常规的同一个工程下面一般不需要使用回调函数。(个人认为).。
使用回调函数需要注意的地方:
对于函数的声明:
type
THDProcedure=procedure(s:string); stdcall;