如果模块A有数据要给模块B,很明显模块B提供API给模块A,A只需要调用API传输数据就可以轻松传输数据了。但是如果 B无法提供API给A呢?比如A用c语言开发,B用Java开发;又或者模块A是底层厂商的产品,提供给客户,那么上面的方法就行不通了,这个时候就要用到回调函数了。
回调函数其实就是函数指针,即指向函数的指针变量。
/**********模块A*************/
//回调函数
typedef void(*pAFunCB)(char *buffer);
extern void RegisterCB(pAFunCB pfun);
pAFunCB gfun;
//回调函数注册
void RegisterCB(pAFunCB pfun)
{
gfun = pfun;
}
int main()
{
char buffer[5]="1234";
while(1)
{
gfun(buffer);
}
return 0;
}
/**********模块B*************/
void *fun(char *buffer)
{
printf("%s\n", buffer);
}
int main()
{
//注册回调函数
RegisterCB(fun);
reurn 0;
}
模块A提供RegisterCB给模块B,B将接收数据函数注册到模块A中,这样数据就可以及时传递了。