码迷,mamicode.com
首页 > 其他好文 > 详细

回调函数

时间:2017-07-04 20:20:57      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:结构   oid   struct   信息   static   功能   str   实参   创建   

回调函数,设上层模块为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()了。

回调函数

标签:结构   oid   struct   信息   static   功能   str   实参   创建   

原文地址:http://www.cnblogs.com/aipan-123456/p/7117750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!