从给定的代码片段来看,这是一段C++代码,主要涉及到的是消息队列的实现与管理。在IT行业中,消息队列是一种用于处理应用程序之间的异步通信的技术,它允许发送者无需等待接收者完成处理就能继续执行,提高了系统的响应速度和效率。下面将详细解析代码中的关键知识点: ### 消息队列的基本结构 代码中定义了`ABMessageData`类作为消息数据的基础结构,其具体数据类型并未给出,仅提供了克隆自身的纯虚函数和析构函数。这表明`ABMessageData`类的设计是为了支持多种类型的消息数据,并通过共享指针`PtrMsgDat_t`进行管理,便于内存的动态分配和回收。 ### 消息结构体`ABMessage` `ABMessage`结构体是具体的消息载体,包含以下字段: - `mMessage`:表示消息ID,用于标识不同类型的事件或指令。 - `mTimeStampSent`:发送消息的时间戳,通常用于统计或追踪消息的生命周期。 - `mTimeExpired`:消息过期时间,控制消息的有效期。 - `mData`:消息数据,由`PtrMsgDat_t`管理。 - `mReceiverInfo`:接收者信息,用于确定消息的目标对象。 ### 消息优先级 消息队列支持不同的优先级,包括实时、高、正常和低四个等级,通过枚举`ABMessagePriority`定义。这使得系统能够根据消息的重要性和紧急程度进行调度,确保高优先级消息能够得到及时处理。 ### 消息队列`ABMessageQueue`类 `ABMessageQueue`类负责管理不同优先级的消息队列。它提供了以下功能: - 插入消息:通过`insert`方法将消息按照优先级插入到相应列表中。 - 获取消息:`getMessage`方法从队列中取出消息,优先级高的消息先被处理。 - 单例模式:`getInstance`方法返回消息队列的单例对象,确保全局只有一个消息队列实例。 ### 发送消息 代码还定义了`sendMessage`和`sendMessageEx`函数,分别用于发送普通消息和带有过期时间的消息。此外,`postMessage`用于发送实时消息,不需等待即可立即处理。 ### 更新消息 `UpdateMessage`函数可能是用于周期性地检查消息队列并更新状态,如处理过期消息或重新排序队列等操作。 ### 总结 这段代码提供了一个基于C++的消息队列框架,支持多优先级消息的异步处理,适用于游戏开发或其他需要高效异步通信的场景。通过使用消息队列,可以有效解耦系统组件,提高并发处理能力,优化资源利用。理解并掌握消息队列的原理和实现,对于IT领域的软件开发者来说是一项重要的技能。
#define __AB_MESSAGE_H__
#include <boost/shared_ptr.hpp>
#include <list>
#include "jm.h"
#include "messagemacro.h"
#include "gameobject.h"
#include "objdna.h"
namespace message{
//消息包含的数据
struct ABMessageData;
typedef boost::shared_ptr<ABMessageData> PtrMsgDat_t;
struct ABMessageData
{
virtual PtrMsgDat_t clone() = 0;
virtual~ABMessageData(){}
};
struct ABMessage
{
int mMessage;//消息号
int mTimeStampSent;//发送的时间戳,插入队列时的系统的时间戳
int mTimeExpired;//过期的时间戳,消息应该被处理时系统的时间戳
PtrMsgDat_t mData;//持有消息的数据
common::ObjectInfo mReceiverInfo;//接受者信息,并不持有接受者的shared_ptr。当接受者不存在时,消息将会被丢弃。
: mMessage(0)
, mTimeStampSent(0)
, mTimeExpired(0)
//, mReceiverInfo(0)
{
}
ABMessage(common::RawPtrObj_t target,int msg,ABMessageData& data,int expire = 0)
: mMessage(msg)
, mData(data.clone())
, mReceiverInfo(target)
, mTimeExpired(expire)
{
mTimeStampSent = 0;
//m_timeExpired = 0;
}
};
//消息在即将过期时被处理
//消息按优先级分组,优先级高的先被分发
//分组内按过期时间先后排序,即将过期的先被执行
//实时消息将被实时执行,不会加入消息队列中
enum ABMessagePriority{
Priority_RealTime,
Priority_High,
Priority_Normal,
Priority_Low,
};
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助