PS做网站页面尺寸清明节ppt模板免费下载
PS做网站页面尺寸,清明节ppt模板免费下载,郴州新网二手车信息,做淘宝主页网站简述大家都知道#xff0c;在C语音中指针的地位很重要#xff0c;各种指针#xff0c;功能很强大#xff01;但是用不好#xff0c;指针也比较容易出问题。这里介绍的是函数指针的一种应用方法#xff0c;即使用函数指针来实现消息命令的注册与回调处理。代码测试的处理函… 简述大家都知道在C语音中指针的地位很重要各种指针功能很强大但是用不好指针也比较容易出问题。这里介绍的是函数指针的一种应用方法即使用函数指针来实现消息命令的注册与回调处理。代码测试的处理函数这里为了测试都是空函数#include
#include test_msg_proc.hvoid proc_msg_reg(int cmd, const void *pData, int len)
{printf(in proc_msg_reg , cmd: %d, data: %s, data len: %d\n, cmd, (const char *)pData, len);//处理数据
}void proc_msg_login(int cmd, const void *pData, int len)
{printf(in proc_msg_login, cmd: %d, data: %s, data len: %d\n, cmd, (const char *)pData, len);//处理数据
}void proc_msg_test(int cmd, const void *pData, int len)
{printf(in proc_msg_test , cmd: %d, data: %s, data len: %d\n, cmd, (const char *)pData, len);//处理数据
}函数指针定义//函数指针
typedef void (*pfunc)(int , const void *, int );消息处理节点信息结构体//消息处理节点信息结构体
typedef struct MsgProcNodeInfo
{int cmd; //消息名字char name[64]; //用于存储消息名字方便调试pfunc func; //处理回调函数
}MsgProcNodeInfoSt;接下来是一个消息信息结构体的数组定义也就是关键部分消息命令的注册表//消息处理注册表注册命令字与其对应的处理函数
static MsgProcNodeInfoSt msgMap[]
{{0, regCmd, proc_msg_reg},{1, loginCmd, proc_msg_login},{2, testCmd, proc_msg_test},
};主处理函数用于根据命令字在注册表里查找对应的处理函数然后回调处理。这里面有个小技巧如果命令字与数组索引正好是一致的那可以直接拿命令字作为数组的下表去索引对应的节点调用其函数指针即可。//处理函数
void proc_msg(int cmd, const void *pData, int len)
{
#if 1//处理int i 0; for ( i 0; i sizeof(msgMap)/sizeof(MsgProcNodeInfoSt); i ){if ( msgMap[i].cmd ! cmd )continue;if ( msgMap[i].func NULL )continue;msgMap[i].func(cmd, pData, len);}#else //如果命令字正好与数组索引相同也可以这样取巧,直接拿命令字作为索引用if ( cmd sizeof(msgMap)/sizeof(MsgProcNodeInfoSt) ) //越界判断return;msgMap[cmd].func(cmd, pData, len);
#endif
}主函数#include
#include test_msg_proc.hint main(int argc, char **argv)
{proc_msg(0, 注册, sizeof(注册));proc_msg(1, 登录, sizeof(登录));proc_msg(2, 测试, sizeof(测试));return 0;
}编译运行结果编译[fensfens app/test_func_point]$make
gcc -Wall -I. -c main.c -o main.o
gcc -Wall -I. -c test_msg_proc.c -o test_msg_proc.o
gcc ./main.o ./test_msg_proc.o -o test -Wall -I. -lpthread
strip test运行[fensfens app/test_func_point]$./test
in proc_msg_reg , cmd: 0, data: 注册, data len: 7
in proc_msg_login, cmd: 1, data: 登录, data len: 7
in proc_msg_test , cmd: 2, data: 测试, data len: 7从上面的打印可以看出命令字处理的时候都对应到了注册的回调函数。在实际用时数据的内容可以是十六进制数据命令字也可以改为字符串格式。声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91762.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!