admin 管理员组文章数量: 1087135
2024年12月26日发(作者:企业网站建设原则有哪些)
C语言--回调函数和注册
函数注册和回调函数
1、什么是函数注册和回调
回调函数无非是对函数指针的应用,说白了就是通过使用函数指
针来调用一个函数,而函数注册就是把函数指针作为参数传递出去便
于别的模块使用的过程。所以函数注册就是为了回调,先注册再回调。
2、为什么要使用回调函数
回调函数可以把调用者与被调用者分开,所以调用者不关心谁是
被调用者以及被调用者如何实现。它只需知道存在一个具有特定原型
和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要
调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似
事件的时候可以灵活的使用不同的方法。
3、回调函数常见应用场景
不同模块由不同开发人员实现,为了实现模块间信息交互触发行
为。(似乎很难理解,下面看模型吧)
3、函数注册和回调的模型
模块A用来实现出现各种事件后的函数处理,程序B 用来监控发
生的事件。A模块向B模块注册函数,B模块监控到事件后回调事件的
函数处理。
直接上代码:
//test.h 头文件
#include
#include
#include
#include
typedef void (*pf_callbakck)(int a);
typedef struct Compute_ST
{
int index;
pf_callbakck function;
}Compute_ST;
int Registe_Callback_Fun(Compute_ST *registed_fun);
void mgmtb_fun(int num);
/*A Module*/
/*TestA.c 文件
实现回调函数*/
#include "test.h"
void callback_fun(int event)
{
switch(event)
{
case 1:
{
printf("ABCDEFG.n");
}
break;
case 2:
{
printf("abcdefg.n");
}
break;
case 3:
{
printf("1234567.n");
}
break;
case 4:
{
printf("7654321.n");
}
break;
default:
{
printf("New event, %d.n",event);
}
}
}
void main()
{
int event = 0;
Compute_ST ptr_compute;
ptr_ = 1;
ptr_on = callback_fun;
//注册回调函数
if(-1 == Registe_Callback_Fun(&ptr_compute))
{
printf("Registe failed.n");
}
for(;;)
{
printf("Enter number:");
scanf("%d", &event);
if(event == 0)
{
return;
}
//触发事件
mgmtb_fun(event);
}
return;
}
/*B Module
testB.c文件
实现注册函数
实现事件触发回调*/
#include "test.h"
pf_callbakck g_ptrfun;
int Registe_Callback_Fun(Compute_ST *registed_fun)
{
if(1 != registed_fun->index)
{
printf("Registe failed.n");
return -1;
}
g_ptrfun = registed_fun->function;
}
void mgmtb_fun(int event)
{
g_ptrfun(event);
}
把上面三个文件放在同一个目下编译
[root@localhost home]# gcc testA.c testB.c -o
[root@localhost home]# ./
Enter number:3
1234567.
Enter number:2
abcdefg.
Enter number:1
ABCDEFG.
版权声明:本文标题:C语言--回调函数和注册 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1735314597a1646863.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论