回调函数
回调函数,设上层模块为A,下层模块为B。本来是A调用B里的函数b(),但是b()需要调用A模块里的a(),这时候a()就称为回调函数。实际上回调函数就是用于实现两个模块相互通信。当然,在c++里面,实现交互功能还可以用相互作为成员变量。
举个例子:
B:
typedef void (*Axxx) (void* lp, Data data);//这就是回调函数原型,lp是A模块和B模块相互的纽带,由A创建,在A调用B时使用,一般是b()函数的实参,b(viod* lp)。data就是B想从A得到的数据了
void set_Axxx(void* lp, Axxx a);//这是回调函数的注册。lp同上,pfn就是指向回调函数的指针。通过该函数,A把回调函数传给B.
void b(void* lp)//这是B模块的函数,供A调用。同时该函数里面想调用A模块的a()函数。
{
lp->a();
}
A:
struct LP //该结构体是A调用B用到的信息
{
Axxx a;
...
}
a(void* lp, Data data) //这是回调函数
{
data = ...;
}
static void set_Axxx(void* lp, Axxx a)//设置回调函数
{
LP *lp = (LP*)lp;
lp->a = a;
}
main()
{
LP lp;
set_Axxx(&lp, a);
b(&lp);
}
实际就是把a()当做参数,传到B模块里了。只是它规定的回调函数的原型,和回调函数的注册,把过程搞得复杂了。相当于A定义了一个纽带变量LP,回调函数的注册就是把回调函数首地址给LP,把LP传给B,这样B就可以调用a()了。