C学习-回调函数

注册函数最好在定义函数的.c文件中进行,放在初始化Init函数中,后面直接在主函数中调用初始化Init函数

1.关于回调函数的使用。

①大致的过程是在应用层或者主函数中,定义一个函数,将函数(函数名就是函数地址)赋给封装好的库里面的指针变量,我们下面这个例子就是通过调用库里面的注册函数

void KeyScanCBSRegister(pKeyScanCallBack *pCBS)
{
    if(pKeyScanCBS == 0)
    {
        pKeyScanCBS = pCBS;
    }
}

②对函数进行注册(将函数赋给函数指针)  KeyScanCBSRegister(KeyScanHandle);

int main(int argc, char *argv[])
{
    KeyInit();
    KeyScanCBSRegister(KeyScanHandle);
    KeyPoll();
 
    return 0;
}

③库函数就会在有该指针的位置对注册函数进行调用pKeyScanCBS(keyVal,keyState);

void KeyPoll()
{
    printf("Please Enter key value:");
    if(scanf("%d",&keyVal)==1)
    {
        printf("\r\n");
        printf("Please enter key state:");
        if(scanf("%d",&keyState)==1)
        {
            if(pKeyScanCBS != 0)
            {
                pKeyScanCBS(keyVal,keyState);
            }
     
        }        
    
    }
}

④在主函数里面调用这个KeyPoll();就会对回调函数进行调用

int main(int argc, char *argv[])
{
    KeyInit();
    KeyScanCBSRegister(KeyScanHandle);
    KeyPoll();
 
    return 0;
}

#ifndef _KEY_H_
#define _KEY_H_
typedef enum 
{
    KEY1,
    KEY2,    
}KEY_ID_TYPEDEF;

typedef enum
{
    KEY_IDLE,    //空闲 
    KEY_PRESS,    //按键短按
    KEY_LONG_PRESS,    //按键长按
    KEY_RELEASE,//按键释放
 
}KEY_STATE_TYPEDEF; 

typedef void (*pKeyScanCallBack)(KEY_ID_TYPEDEF KeyID,KEY_STATE_TYPEDEF KeyState);

 
void KeyInit();
void KeyPoll();
void KeyScanCBSRegister(pKeyScanCallBack pCBS);
#endif

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值