首页 > 编程语言 >【开源需求】C++多线程消息分发架构

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

时间:2023-02-16 18:33:21浏览次数:47  
标签:分发 MessageLoop C++ 开源 线程 消息 模块 多线程 ID

项目【gi_messager】

开源项目:https://girakoo.com/
联系方式:[email protected]

需求简述

  1. 在多线程环境中,为每个线程提供独立的消息队列 MessageLoop。注:主线程默认自动创建消息队列。
  2. MessageLoopCenter 提供 MessageLoop 的查询功能。能够获得指定 MessageLoop 的句柄。
    • 同一个 MessageLoop 可以绑定多个模块 ID,便于多个模块共享同一个线程 MessageLoop。
  3. MessageLoop 提供线程安全的 postMessage,getMessage,peekMessage 方法。
    • Message 结构中需要包含模块 ID,消息 ID,参数类型 MsgType,参数 MessageParam。
    • 同时匹配模块 ID,消息 ID 时,能够获得相应的消息分发通知。
    • MessageParam 默认提供基础类型 int, float, double, char, std::string,如果需要其他数据,需要自行实现 MsgParam 的方法。实现内存的创建,拷贝,释放等过程,保证数据线程安全和合理的内存释放。
  4. 提供 ExhaustMessage 消息。阻塞式消息,将队列中全部消息分发完毕后,解除阻塞。
  5. 消息分发提供计时功能,超过100ms未返回的回调处理,将会显示警告日志。

模块设计

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

代码范例

// TODO

计划中

代码托管

https://gitee.com/girakoo/gi_messager

标签:分发,MessageLoop,C++,开源,线程,消息,模块,多线程,ID
From: https://www.cnblogs.com/girakoo/p/17127887.html

相关文章

  • 谈谈muduo库的销毁连接对象——C++程序内存管理和线程安全的极致体现
    #前言网络编程的连接断开一向比连接建立复杂的多,这一点在陈硕写的muduo库中体现的淋漓尽致,同时也充分体现了C++程序在对象生命周期管理上的复杂性,稍有不慎,满盘皆输。为......
  • 以AQS中acquire()方法为例来分析多线程间的同步与协作
    谈到java中的并发,我们就避不开线程之间的同步和协作问题,谈到线程同步和协作我们就不能不谈谈jdk中提供的AbstractQueuedSynchronizer(翻译过来就是抽象的队列同步器)机......
  • 精确延时---多线程延时阻塞精度asm("nop") nanosleep usleep sleep select
    Linux平台延时之sleep、usleep、nanosleep、select比较 1、sleep的精度是秒2、usleep的精度是微妙,不精确3、select的精度是微妙,精确struct timevaldelay;delay.tv_......
  • C++ (伪)随机数生成
    #include<iostream>#include<random>namespacerandom{//从系统获取随机数作为种子std::random_devicerd;//创建种子序列std::seed_seqrr{r......
  • 关于c++内存优化的方法
    1.使用智能指针shared_ptr<>或者unique_ptr<>此种方法new出来的对象的内存会在超出作用域后自动释放2.使用clear清除列表或者swap清空对象 或者将指针赋值为NULL3.r......
  • C++梳理
    1、基础篇1、C++中的四种智能指针为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免程序员申请的空间在函数结束时忘记释放,造成内存泄漏这种情况的发⽣。使⽤智能......
  • 【管理您的整个软件供应链】上海道宁与​Sonatype助力您以更安全的开源更快地交付产品
    Sonatype是美国一家开源DevOps服务供应商支持开源组件(中央仓)为开发者提供资源库管理器(Nexus)帮助加速软件创新配备Nexus产品的组织可以做出更好的决策更快地进行......
  • C++ 浮点数比较代码
    #include<algorithm>#include<cmath>#include<iostream>//如果a和b之间的差异在a和b中较大者的epsilon百分比以内,则返回trueboolapproximatelyEqualR......
  • 编译和运行一个C++程序
    由C++编写的源代码需要经过编译和链接后,将其转化为可执行程序后才能运行.在C语言中,使用gcc命令来编译和链接C程序gccmain.c//编译单个源文件gccmain.cmodule.......
  • C++引用
    引用reference举例如:intref=&a;只是产生了一个a的别名,ref并不一个真正的变量。可以用在形参上,代替指针,使得代码更加简洁。voidadd(int*value),等效于void......