【开源需求】C++多线程消息分发架构

项目【gi_messager】

  1. 在多线程环境中,为每个线程提供独立的消息队列 MessageLoop。注:主线程默认自动创建消息队列。

  2. MessageLoopCenter 提供 MessageLoop 的查询功能。能够获得指定 MessageLoop 的句柄。

    1. 同一个 MessageLoop 可以绑定多个模块 ID,便于多个模块共享同一个线程 MessageLoop。
  3. MessageLoop 提供线程安全的 postMessage,getMessage,peekMessage 方法。

    1. Message 结构中需要包含模块 ID,消息 ID,参数类型 MsgType,参数 MessageParam。
    2. 同时匹配模块 ID,消息 ID 时,能够获得相应的消息分发通知。
    3. MessageParam 默认提供基础类型 int, float, double, char, std::string,如果需要其他数据,需要自行实现 MsgParam 的方法。实现内存的创

      ,拷贝,释放等过程,保证数据线程安全和合理的内存释放。
  4. 提供 ExhaustMessage 消息。阻塞式消息,将队列中全部消息分发完毕后,解除阻塞。

  5. 消息分发提供计时功能,超过100ms未返回的回调处理,将会显示警告日志。

模块设计

  • GiMessage:消息结构体。可以通过继承该类,实现自定义类型的消息分发。
  • GiMessageObserver:消息观察者。可以接受到符合自身ID的消息。可以接受GiMessageLoop的状态通知。
  • GiMessageLoop:消息循环主题。

代码范例

// TODO

计划中

代码托管

Gitee

【GiraKoo】C++多线程消息分发架构的更多相关文章

  1. 深入详解美团点评CAT跨语言服务监控(四)服务端消息分发

    这边首先介绍下大众点评CAT消息分发大概的架构如下: 图4 消息分发架构图 分析管理器的初始化 我们在第一章讲到服务器将接收到的消息交给解码器(MessageDecoder)去做解码最后交给具体的消费 ...

  2. EF6多线程与分库架构设计之Repository

    1.项目背景 这里简单介绍一下项目需求背景,之前公司的项目基于EF++Repository+UnitOfWork的框架设计的,其中涉及到的技术有RabbitMq消息队列,Autofac依赖注入等常用的 ...

  3. EF6的多线程与分库架构设计实现

    1.项目背景 这里简单介绍一下项目需求背景,之前公司的项目基于EF++Repository+UnitOfWork的框架设计的,其中涉及到的技术有RabbitMq消息队列,Autofac依赖注入等常用的 ...

  4. cocos creator主程入门教程(六)—— 消息分发

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 本篇开始介绍游戏业务架构相关的内容.在游戏业务层,所有需要隔离的系统和模块间通信都可以通过消息分发解耦. ...

  5. 使用Netty4实现基本的消息分发

    示例工程代码 可从附件下载 具体的说明和用法在后面介绍 需求与目的 一个游戏服务端需要处理各种业务逻辑,每一种业务逻辑都对应着一个请求消息和一个响应消息.那么服务端需要把这些不同的消息自动分发到对应的 ...

  6. Kafka分片存储、消息分发和持久化机制

    Kafka 分片存储机制 Broker:消息中间件处理结点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka集群. Topic:一类消息,例如 page vi ...

  7. 现代IM系统中的消息系统架构 - 架构篇

    https://mp.weixin.qq.com/s/sAlI8MCIKUSj5KbcT3W-Lw 现代IM系统中的消息系统架构 - 架构篇 原创: 木洛 云栖社区 1周前

  8. 一个可以代替冗长switch-case的消息分发小框架

    在项目中,我需要维护一个应用层的字节流协议.这个协议的每条报文都是一个字节数组,数组的头两个字节表示消息的传送方向,第三.四个字节表示消息ID,也就是消息种类,再往后是消息内容.时间戳.校验码等……整 ...

  9. Android 消息分发机制

    Android 中针对耗时的操作,放在主线程操作,轻者会造成 UI 卡顿,重则会直接无响应,造成 Force Close.同时在 Android 3.0 以后,禁止在主线程进行网络请求. 针对耗时或者 ...

  10. 多线程消息监听容器配置[ 消费者spring-kafka配置文件]

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

随机推荐

  1. 字符集编码cp936、ANSI、UNICODE、UTF-8、GB2312、GBK、GB18030、DBCS、UCS

    一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS--是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's go!  ...

  2. jetbrains账户的注册

    注册步骤 1.进入官网界面 官网地址在这里啦:https://www.jetbrains.com/ 官网本来显示的是这个界面: 点击右上角的Learning Tools,然后选择该页面内的这里: 2. ...

  3. 2021 技术展望丨AV1 在 RTC 应用实践中的现状与展望

    线上会议.在线教育.电商直播等多个场景的兴起,也使得实时互动技术从幕后走到台前,得到了更多人的关注.编解码.网络传输.计算机视觉等 RTE 相关的一系列技术也正焕发出更强的生命力.2021 年,在深度 ...

  4. 深度学习之PyTorch实战(4)——迁移学习

    (这篇博客其实很早之前就写过了,就是自己对当前学习pytorch的一个教程学习做了一个学习笔记,一直未发现,今天整理一下,发出来与前面基础形成连载,方便初学者看,但是可能部分pytorch和torch ...

  5. 怎么在php7项目中安装event扩展

    今天就跟大家聊聊有关怎么在php7项目中安装event扩展,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获. 安装支持库libevent wget ...

  6. day3 函数的定义和调用,练习编写简单的程序(记录2)

    一.值传递.指针传递.引用传递 值传递: 在值传递中,函数的形参是由实参的副本初始化的,也就是说,函数内部操作的是实参的一个拷贝.值传递适用于传递简单数据类型(如整数.浮点数.字符等)以及小型结构体等 ...

  7. 手写Mybatis代码实现会出现的问题

    实现自定义框架过程中遇到的问题及解决方案: 1.执行 Resources.class.getClassLoader().getResourceAsStream(path) 方法无法获得去字节输入流 解 ...

  8. SSM整合的所有配置(配置文件)

    mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...

  9. Solon2 的通讯服务线程配置

    Solon 框架,关于通讯服务的所有配置 #服务端口(默认为8080) server.port: 8080 #服务主机(ip) server.host: "0.0.0.0" #服务 ...

  10. MySQL(十二)索引使用的情况分析

    索引使用的情况分析 数据准备 创建表student_info.course CREATE TABLE `student_info` ( `id` int NOT NULL AUTO_INCREMENT ...