当前位置: 首页 > article >正文

C++ 消息分发类:详细示例应用

消息分发的概念
消息分发(Message Dispatching)是一种设计模式,广泛用于处理异步事件和消息。在 C++ 中,消息分发类通常用来接收和分发来自多个源的消息(如网络连接、传感器数据、用户输入等),并根据消息类型将其发送给相应的处理器(Handler)或回调函数。

C++ 消息分发类的示例
假设我们有一个简单的应用程序,它接收来自不同来源的消息(如传感器数据或用户命令),并将这些消息分发给不同的处理器进行处理。

以下是一个简化的 C++ 消息分发类的实现:

#include
#include
#include <unordered_map>
#include

// 定义消息处理函数类型
using MessageHandler = std::function<void(const std::string&)>;

class MessageDispatcher {
public:
// 注册消息处理器
void registerHandler(const std::string& messageType, MessageHandler handler) {
handlers_[messageType] = handler;
}

// 分发消息
void dispatch(const std::string& messageType, const std::string& message) {
    auto it = handlers_.find(messageType);
    if (it != handlers_.end()) {
        it->second(message);  // 调用处理函数
    } else {
        std::cout << "No handler for message type: " << messageType << std::endl;
    }
}

private:
std::unordered_map<std::string, MessageHandler> handlers_; // 消息处理器映射表
};

// 示例处理函数
void handleSensorData(const std::string& data) {
std::cout << "Processing sensor data: " << data << std::endl;
}

void handleUserCommand(const std::string& command) {
std::cout << "Processing user command: " << command << std::endl;
}

int main() {
MessageDispatcher dispatcher;

// 注册不同类型的消息处理器
dispatcher.registerHandler("sensor", handleSensorData);
dispatcher.registerHandler("command", handleUserCommand);

// 模拟消息分发
dispatcher.dispatch("sensor", "Temperature: 25°C");
dispatcher.dispatch("command", "Turn on the light");
dispatcher.dispatch("unknown", "Some unknown message");

return 0;

}
示例解释
MessageDispatcher 类维护一个消息类型到消息处理函数的映射表(handlers_),并提供 registerHandler 方法注册新的消息处理器。
dispatch 方法根据消息类型找到对应的处理函数并调用它。
main 函数中,我们注册了两个处理函数(handleSensorData 和 handleUserCommand)并分发一些示例消息。
应用场景
物联网(IoT)设备控制:根据不同传感器或设备的消息类型,分发给不同的处理器进行响应。
网络服务器:根据不同的客户端请求类型(如 HTTP GET、POST、WebSocket 消息)分发给不同的处理逻辑。
游戏开发:将玩家输入或游戏事件分发给相应的模块处理(如音效、动画、物理引擎等)。


http://www.kler.cn/news/290417.html

相关文章:

  • Python 数据分析笔记— Numpy 基本操作(上)
  • zdppy_cache缓存框架升级,支持用户级别的缓存隔离,支持超级管理员管理普通用户的缓存
  • 【MySql】面试问答:在使用mysql时,遇到分页查询慢的情况怎么处理?
  • 观测云核心技术解密:eBPF Tracing 实现原理
  • Java项目:137 springboot基于springboot的智能家居系统
  • 1. 深度学习基础:从神经网络到深度学习
  • CSS系列之浮动清除clear(三)
  • ztree搜索结果高亮变颜色(非highlight属性)
  • upload文件上传靶场
  • 在react中用three.js 渲染模型 在上面创建标签
  • 传统CV算法——基于opencv的答题卡识别判卷系统
  • 【大数据】Java与Python的无缝对接:探讨Java调用Python的方法与原理
  • <数据集>车辆识别数据集<目标检测>
  • 你必须知道的C语言问题(8)
  • Go 中间件学习
  • 【CanMV K230】边缘检测
  • 羊大师:白露养生经,羊奶不可少
  • docker实战基础一 (Docker基础命令)
  • 【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战
  • C++实现简易俄罗斯方块小游戏
  • Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化
  • 心觉:如何填平想象和愿望之间的鸿沟?
  • Docker设置socks5代理
  • 大模型超详细解读汇总
  • 一个“改造”的工厂背后:中国电商的AI重构
  • 赛码网牛客在acm模式下利用node.js处理多行输入方法
  • 视频结构化从入门到精通——图像算法类型介绍
  • LuaJit分析(三)luajit字节码文件格式
  • 【C++】string的模拟实现
  • 1119 Pre- and Post-order Traversals