![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 72
fananchong2
这个作者很懒,什么都没留下…
展开
-
【C++】EntityX 的事件模块介绍与代码分析
该库使用 C++11 提供了,函数句柄的订阅与发布。本文不做介绍,以后再介绍,因为还有 C++14 tuple/index sequence 的实现方式。该类作用是内部实现用于包裹使用者自己定义事件,让其具备通过 Event()::family() 内部标识 E。即通过 Event()::family() 赋予 E 自动获得 EventID 的能力。使用者直接是自己定义事件 struct ,比如记为 E。是一个基于 C++11 的 ECS 开源库。这些代码均比较简单,细节,不再一一介绍。原创 2024-07-11 11:10:10 · 425 阅读 · 0 评论 -
【C++】一种优雅的枚举定义的代替技巧
很多系统,仅程序运行态时用来区分不同的值,这时,如果有不需要额外维护值的方法,自然是更优雅的。枚举值,在如 db 存取、网络传输等,需要关注确定的值,且不能修改。而上述方法,就非常简单、简洁的提供了自动生成不同值的一种方法。比如,做事件触发系统。代码时,发现一种更为优雅的定义方式。然后事件类型,通过继承。原创 2024-07-09 22:15:23 · 200 阅读 · 0 评论 -
skynet - 多线程 Actor 模型
Actor 模型中, Actor 间通过消息交互。因此 skynet 的 module service 均有自己的消息队列。thread_monitor 每 5 秒检查 1 次,如果版本号不变,打印日志警告,有线程可能死锁了。工作线程,要执行 Actor 消息,首先从全局消息队列摘取 Actor 的消息队列。为了能让 Actor 高性能并发执行, skynet 中设置了全局消息队列。工作线程执行的都是 Actor 消息处理。skynet 给工作线程设置了优先级。工作线程在没消息后,会 sleep。原创 2024-05-19 23:16:58 · 831 阅读 · 0 评论 -
Lua 协程池
阅读了 skynet 相关使用协程的代码,发现 skynet 使用了协程池。中介绍了 Lua 协程的使用,模仿 golang 封装了下。还可以做进一步的优化。原创 2024-05-11 14:40:04 · 537 阅读 · 0 评论 -
使用 Lua 协程模拟 Golang 的 go defer 编程模式
由于项目中暂时是一根线程管理一个 lua_state 对象,因此暂时无需求多线程中的协程间的通信需求。因为要对 defer 的函数句柄做保持,以便退出时执行。以上就可以在 Lua 中完全 Golang 的方式编写协程代码了。Lua 协程异常,通过。捕获,并返回错误信息。原创 2024-04-30 10:44:40 · 1350 阅读 · 2 评论 -
使用 Lua 协程处理异步回调函数
通过封装提供 go 函数,可以像 Go 语言一样,提供简易的启动协程界面项目的所有异步均可以封装提供 co_xxx 函数,使得需要回调的 API 均可以顺序编写代码。例如co_sleep等等。原创 2024-04-14 11:32:14 · 634 阅读 · 0 评论 -
EmmyLuaDebugger介绍与源代码分析
/ 略if (!return 1;可以从以上代码中,学习到如何编写一个 Lua 自定义的模块。原创 2024-04-06 22:23:53 · 383 阅读 · 0 评论 -
EmmyLua 远程调试 Lua 代码
项目中用到 LuaJIT ,正常思路静态链接了 LuaJIT 库。这导致了 EmmyLua 不能用。可以设置 export LD_LIBRARY_PATH=/your_so_path。EmmyLua 可以调试 C++ Lua 混合编程的项目。先启动项目要调试的服务;程序动态链接,需要寻找 so。原创 2024-03-28 18:23:07 · 445 阅读 · 0 评论 -
iguana 库 C++ 反射原理
通过定义 REFLECTION 宏,在编译期,生成结构体/类的元数据信息字段名列表字段地址列表将字段地址列表做成 std::tuple将该 std::tuple 做成 std::map , 其 key 为字段名,其值为 std::variant 类型字段地址不同格式的序列化、反序列,最终要通过字段名给对象的字段赋值或取值通过 std::visit - std::variant 编程技巧使用函数类型特化方式,避免 if else 这种类型分支判断以上。原创 2024-03-16 13:49:19 · 1391 阅读 · 0 评论 -
doctest 中的编程技巧
官方介绍: The fastest feature-rich C++11/14/17/20/23 single-header testing framework。无独有偶, C++ 无栈协程也是一个 if else 分支组成。能多次重入,每次只执行一部分代码。从这个角度看,它们的核心编程技巧一样的。等等,就可以扩展逻辑功能。原创 2024-03-13 19:33:11 · 799 阅读 · 0 评论