【开源需求】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. SimpleITK和nibable读取nii文件

    import SimpleITK as sitk path = 'nii全路径' nii_obj = sitk.GetArrayFromImage(sitk.ReadImage(path)) #sha ...

  2. 微软NewBing真是Niubility

    这是本人2012年的拙作:           晨兮,闻风雨,后而雷鸣电闪.迟不可再三,若故无食.然何如耶?雨大风狂,单车奈何?公交卡空,恐时不予我也.不免叹也,天亦不予我!         而后出, ...

  3. D3和X6

    D3 版本 d3已经更新到v7版本,中文文档只更新到v4版本,存在部分api不适用和过时问题 使用d3-darge插件布局,插件适配d3版本为v5,近年未更新 API 使用darge中setNode和 ...

  4. File 未释放文件权柄问题处理

    Unreleased Resource: Files Abstract 程序可能无法释放某个文件句柄. Explanation 程序可能无法成功释放某一个文件句柄. 资源泄露至少有两种常见的原因: - ...

  5. SpringBoot——配置嵌入式 Servlet容器

    更多内容,前往 IT-BLOG 一.如何定制和修改Servlet容器的相关配置 前言:SpringBoot 在Web 环境下,默认使用的是 Tomact 作为嵌入式的 Servlet容器: ​[1]修 ...

  6. Kafka 实现延迟队列、死信队列、重试队列

    更多内容,访问 IT-BLOG Kafka中实现延迟队列 在发送延时消息的时候并不是先投递到要发送的真实主题(real_topic)中,而是先投递到一些 Kafka 内部的主题(delay_topic ...

  7. java多线程基础小白指南--线程的状态

    线程的状态比较混乱,网上的资料也是五花八门,这时候就要参考 注意截图中的最后一句话,很多人把jvm中线程状态与实际上的os线程状态搞混了,所以才会有很多乱七八糟的状态出现. 注意Runnable其实含 ...

  8. 淘宝商品页面的爬取.py(亲测有效)

    import requests def getHTMLText(url): try: r = requests.get(url,timeout=30) r.raise_for_status() #如果 ...

  9. 一次对pool的误用导致的.net频繁gc的诊断分析

    (最近有读者朋友表示,希望能加一些示意图来描述分析过程中用到的原理知识.好的,之后我会注意,谢谢这位读者) 背景 有位朋友找我,希望我能帮看一下他的一个service.从他的描述看,并没有资源方面的泄 ...

  10. sealos踩坑记录

    前言 记录下我安装sealos的踩坑历程,全网基本没有什么类似的可靠资料,也许是因为太小众了吧,希望能帮助到搜索到此文的人. sealos是什么 Sealos 是以 kubernetes 为内核的云操 ...