带参的宏定义与消息分发实现
来源:互联网 发布:linq 查询重复数据 编辑:程序博客网 时间:2024/04/29 03:51
1.带参宏定义:
#define 宏名(参数列表) 字符串: 宏定义是字符串替换不进行优先级控制
例如:#define S(a,b) a*b,area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2; 类似于函数调用,有一个哑实结合的过程:
正确的宏定义: #define S(a, b) (a)*(b)
特殊说明:
(1)宏名和参数的括号间不能有空格
(2)宏只作替换,不做计算,不做表达式求解
(3)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(4)宏不存在类型,也没有类型转换。
(5)函数只有一个返回值,利用宏则可以设法得到多个值
(6)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
2.消息分发:系统将运行过程中会维护一个或多个消息队列,所有产生的消息都会被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收 句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄 调用相应的窗口过程。
3.消息分发的简单实现:
这里可以通过多层的宏定义实现函数定义和其if 语句,依次来进行消息的分发,找到相应的处理函数;
例:
#define BEGIN_MSG_TEST()\
public int OnMsgArrived(unsigned int msgId,const char* buff)\
{\
#define MSG_HANDLER(msgID, t_func)\
if(msgId == msgID)\
{\
return t_func(buff);\
}\
#define END_MSG_TEST() return 0;\
}
BEGIN_MSG_TEST()
MSG_HANDLER(10, onTest10);
MSG_HANDLER(11, onTest11);
END_MSG_TEST()
- 带参的宏定义与消息分发实现
- 消息的分发与处理
- 使用Netty4实现基本的消息分发
- 使用Netty4实现基本的消息分发
- 定义消息的发送与接收的方法实现
- c++ 带默认值的构造函数 定义与实现分离
- 带消息的TabBarVC 实现
- 在 muduo 中实现 protobuf 编解码器与消息分发器
- c++ 带参数的宏定义 实现反射机制
- Kafka 消息订阅与分发
- 协议消息与应用程序事件的统一分发框架
- ATL与MFC消息分发机制的对比
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- 带参数的宏定义
- C#连接Oracle数据库(执行增删改查操作)
- spring-基于注释(Annotation)的配置(转)---2
- 1797: [Ahoi2009]Mincut 最小割
- IAR cortex-M3 +ucos-III问题集
- 商务英语句型04
- 带参的宏定义与消息分发实现
- if..else 语句应用
- Cocoapods安装及使用
- Cache缓存
- Linux 配置:Xmanager连接Linux图形界面
- springMVC中使用Json数据相关配置
- 设置TextView的关键字高亮
- 面试时,问哪些问题能试出一个Android应用开发者真正的水平?
- 利用百度地图根据三点求位置