回调函数的使用总结(非常重要)

使用场景:  如果本人要调用别人的库,而别人的库有时需要数据主动给本人,这时可以需要用到回调函数。

别人的库 假设是 a.h 和a.C

自己的文件是   b.h和b.c

在a.h和a.c里面需要完成的是两个步骤:

(1)

         a.h里面

        定义回调函数指针

         typedef INT32(*reporttaskdata_callback)(UINT8 op_type,UINT8 *pdata);

       初始化,此函数需要被b.c文件中一开始调用,把相应的具体实体函数传给他。

        VOID reportdata_callback_init(reporttaskdata_callback reportdataproc);

        a.c里面
        reporttaskdata_callback  reportdate_callback_func;
        VOID reportdata_callback_init(reporttaskdata_callback reportdataproc)
        {
           reportdate_callback_func= reportdataproc;
        }

       a.C文件执行回调函数时这样调用就相当于执行b.C的实体函数了。

        reportdate_callback_func(op_type, (UINT8 *)&(recv_data[0]));

(2) b.c里面需要包含 #include "a.h"

       INT32  Function_entity (UINT8 op_type,UINT8 *pdata)

   {

     /*函数实体    执行相关函数操作*/

 }

      在程序一开始运行时 调用 a.h里面的reportdata_callback_init,相当于把函数实体传给了a文件的reportdate_callback_func指针

      reportdata_callback_init(Function_entity);

 

 

 

 

1   首先在 在一个头文件中定义 比如 timer.h

typedef VOID (*timerproc)(UINT32 arg, UINT8 type,UINT32 next_executetime);

2  在另外一个文件的c文件addrdmetertask中 写函数原型

   timerproc   rdmeter_timer_proc()
{
    return rdmeter_settask2timer;
}

VOID rdmeter_settask2timer(UINT32 arg, UINT8 type,UINT32 next_executetime)
{
    rdmeter_add_collectTask(arg,type,next_executetime);
}

3   timerproc proc;

    (*proc)(p->arg, p->type,p->nextstart);//此函数等同于开始执行  rdmeter_add_collectTask(arg,type,next_executetime);
}

注意总结:(1) 在addrdmetertask文件中要引用 头文件timer.h,因为 timerproc在timer.h定义。

                     (2)timer.h不需要包含  addrdmetertask.h文件,并且 timerproc   rdmeter_timer_proc()此函数不需要再写          入 addrdmetertask.h头文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值