数据驱动编程的实现(2)

/*

...紧接上一篇

多输入因子

*/


void func1(void *param);
void func2(void *param);
void func3(void *param);




typedef enum _sender
{
SENDER1 =0,
SENDER2,
SENDER3
}SENDER;


typedef enum _msgtype
{
MSGTYPE1=0,
MSGTYPE2,
MSGTYPE3
}MSGTYPE;


typedef enum _selfstatus
{
STATUS1=0,
STATUS2,
STATUS3
}SELFSTATUS;

typedef void (*FUNCPTR)(void *param);




typedef struct _eventdriver
{
SENDER sender;
MSGTYPE msgtype;
SELFSTATUS selfstate;
FUNCPTR funptr;
}DRI_EVENT;




DRI_EVENT event_map[]=
{
{0,0,0,func1},
{0,0,1,func2},
{0,1,0,func3}
};




FUNCPTR Driver_Event(SENDER sender,MSGTYPE msgtype,SELFSTATUS selfstate)
{
int drivercnt = sizeof(event_map)/sizeof(DRI_EVENT);
int i=0;
LOG_ERR("drivermap :%d\n",drivercnt);


for(i=0;i<drivercnt;i++)
{
if((event_map[i].sender == sender) && \
(event_map[i].msgtype == msgtype) && \
(event_map[i].selfstate == selfstate))
{
LOG_DEBUG("find %d funcptr",i);
return event_map[i].funptr;
}
}


LOG_ERR("no find funptr");
return NULL;

}




void func1(void *param)
{
LOG_INFO("func1 . %s",(char *)param);

}


void func2(void *param)
{
LOG_INFO("func2 . %s",(char *)param);
}


void func3(void *param)
{
LOG_INFO("func3 . %s",(char *)param);
}


void main()
{
funcptr = Driver_Event(0, 0, 1);
funcptr = Driver_Event(1, 0, 0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值