技巧杂集
文章平均质量分 79
很土
专注于高性能服务器设计及开发
展开
-
C 模拟类的命名规范
1). 模拟类以大写字母 'T' 开头的后跟驼峰式名称;2). 模拟类为类数据的指针, 类数据名称为: + "Data"; 公开数据成员必须放在前面, 私有数据成员是受保护的, 只表示私有数据在类数据中占据的内存空间尺寸。原创 2023-06-17 19:37:31 · 548 阅读 · 1 评论 -
几种位操作的相关算法
1. 字节的1位存放在2位的空间里, 如: 0xE3 -> 0xA82A算法1: 按位移位并进行位或运算算法2: 使用查表法算法3: 位的并行处理 // 1 位存放在 2 位的低位, 如: 0xE3 -> 0x5415Word ZoomByte1(Byte AValue){ Word result; // 计算 res原创 2012-08-04 11:48:35 · 1242 阅读 · 0 评论 -
远程调用内核接口的封装类(RCKObjs)
远程调用内核接口的封装类(RCKObjs), RCK 包含 Application, Function, Connection, Command, Response 和 Fields 六大类。原创 2014-07-08 11:32:41 · 1481 阅读 · 0 评论 -
固定尺寸内存块的缓冲队列类及C++实现源码
本文讲的缓冲队列为链接方式, 链接方式一般通过预分配一个结点作为接力点来实现无锁队列, 优点是实现简单, 缺点是浪费一个结点的内存, 当结点内存块尺寸较大时浪费就大了。如何不浪费一个结点内存的链接方式无锁队列? 当队列中只有一个结点时, 本缓冲队列中使用了原子锁进行操作, 这是一种平衡策略, 若读者有更好方法不妨告之一下!原创 2014-10-22 11:08:40 · 2899 阅读 · 0 评论 -
基于 TCP 的通讯接口(TCP Utils)
在 CentOS 6.5 x64 服务器中,单个服务端可以稳定 20 多万个连接同时在线及收发数据,且收发顺畅,这是经过实际使用及压力测试。TCP 通讯接口是对 socket 进行包装,只负责接收和发送数据,不参与应用程序的协议解析。通讯接口对接收和发送线程进行管理,简化了socket接口调用的复杂度。可能很多人会说,TCP 通讯相关接口和类库都很多,何必再造个轮子呢?话虽如此,但 TCPUtils 并不同于其它接口,其简单易用,且通过配置就可以实现大容量连接,并且具有高并发性。原创 2016-07-25 14:40:56 · 4372 阅读 · 0 评论 -
如何实现 RPC 框架的要点浅析
简单的说,RPC 就是从一台主机上的进程 A 通过参数传递的方式调用另一台主机上的进程 B 中的一个函数,并得到返回的结果。因此 RPC 具有以下特点:a. RPC 会隐藏底层的通讯细节,不需要直接处理如何通信及收发数据。b. RPC 是一个请求响应模型。客户端发起调用请求,服务端返回请求响应,这类似于HTTP 的工作方式。c. RPC 在使用形式上像调用本地函数一样去调用远程的函数。原创 2017-02-24 09:45:31 · 3083 阅读 · 0 评论 -
C++面向对象编程原则及人类示例
在 C++ 面向对象编程中,有很多开发人员无法把控类,以及应该如何编写。在编写类时有几个原则必须遵循,这样可以使类拥有健壮性及可用性。人类示例 TPerson 描述了类的生命力,以及类的属性、行为和事件。 面向对象编程的二个基本特征:封装和继承。 封装的目的是为了信息隐藏,并保证类数据成员的私有性和一致性,同时数据成员之间是强耦合,而类与类之间应该弱耦合。 继承的目的是为了扩充类的多样性,多继承和多态都是继承的扩展方式,而继承会增加类与类之间的耦合性。原创 2017-10-12 11:02:10 · 949 阅读 · 1 评论 -
用 C 语言实现单片机中的动态内存管理
在单片机中内存空间很小,主要是为了省硬件成本,如: Cortex m3/m4 的 64KB/192KB, Quectel M26 的 256KB/512KB 等等都不带动态内存管理。为了实现内存动态分配和释放,要么使用厂家库的动态内存管理接口,要么自己写动态内存管理。原创 2018-12-20 09:51:42 · 1804 阅读 · 3 评论 -
查找相同项的双螺旋匹配算法
--------------------------------------------------------------------------------标题: 查找相同项的双螺旋匹配算法作者: 叶飞虎日期: 2012.07.16--------------------------------------------------------------------------原创 2012-08-04 11:40:00 · 1174 阅读 · 0 评论 -
跨平台的 C++ 代码移植要点
--------------------------------------------------------------------------------标题: 跨平台的 C++ 代码移植要点作者: 叶飞虎日期: 2010.09.06------------------------------------------------------------------------原创 2012-08-04 10:08:52 · 1990 阅读 · 0 评论 -
在Win32平台中,多读单写锁如何实现?
--------------------------------------------------------------------------------标题: 在Win32平台中,多读单写锁如何实现?作者: 叶飞虎日期: 2004.03.17-------------------------------------------------------------------原创 2009-03-30 21:24:00 · 2902 阅读 · 28 评论 -
如何使用类的成员方法指针?
在KYLib里有大量使用类成员方法指针回调,即所谓的回调事件方法。例如:/* TObject - 基类 */class TObject{};/* TKYFmtMemEvent - 格式化内存项事件类 */class TKYFmtMemEvent{public: // TOnFormat 事件类型 typedef void (TObject原创 2009-03-20 23:41:00 · 2336 阅读 · 4 评论 -
队列和事件的配合使用示例
一个线程收到事件或消息后直接加入到队列,而处理线程读取队列中的事件或消息,并加以处理。在这个模式中,有一个线程负责写,多个处理线程读自己的队列并处理。虽然看起来象是一写多读,其实不然,针对某一事件队列而言,只有一个线程是写一个线程是读。 队列和事件的配合使用示例如下: /* 方法一: 独立线程处理队列 */// 线程执行体void TDealThread::Ex原创 2009-09-09 21:45:00 · 2417 阅读 · 10 评论 -
B-tree查找函数
--------------------------------------------------------------------------------标题: B-tree查找函数作者: Kyee Ye日期: 2011.04.17-------------------------------------------------------------------------原创 2011-04-17 19:35:00 · 1002 阅读 · 0 评论 -
在一读一写限制下,无锁环形队列如何实现?
环形一读一写队列中,不需要担心unsigned long溢出问题,因为溢出后自动回归,相减值还会保留。示例一(注:Max_Count 必须为 2 的指数,即:2, 4, 8, 16...):// 队列尺寸#define Max_Count 4096#define Max_Mask 4095 // = Max_Count - 1// 变量void*原创 2009-03-28 21:00:00 · 3999 阅读 · 2 评论 -
一读一写情况下,无锁队列如何实现?
一读一写情况下,无锁队列如何实现?其实并不难,先说说一读一写无锁队列的实际应用吧。读写队列最大的应用是:一个线程收到事件或消息后直接加入到队列,而处理线程读取队列中的事件或消息,并加以处理。在这个模式中,有一个线程负责写,多个处理线程读自己的队列并处理。虽然看起来象是一写多读,其实不然,针对某一事件队列而言,只有一个线程是写一个线程是读。此示例可以封装成一个Queue类,在KYLib中有T原创 2009-03-28 19:12:00 · 3176 阅读 · 5 评论 -
日期时间与 time_t 相互转换
--------------------------------------------------------------------------------标题: 日期时间与 time_t 相互转换作者: 叶飞虎日期: 2012.05.25----------------------------------------------------------------------原创 2012-05-25 16:54:29 · 2674 阅读 · 0 评论 -
在单片机中, 64 位整数除以 32 位整数
在单片机中, 64 位整数除以 32 位整数, 因为没有64位寄存器, 所以需要自己实现// 64 位除以 32 位Longword _DivEx(Longword AHiVal, Longword ALoVal, Longword ADivisor, Longword& AHiRet, Longword* ARemainder = NULL){原创 2012-08-04 11:53:39 · 2903 阅读 · 1 评论 -
在Win32平台中,多读单写锁如何使用临界区实现?
--------------------------------------------------------------------------------标题: 在Win32平台中,多读单写锁如何使用临界区实现?作者: 叶飞虎日期: 2011.11.11--------------------------------------------------------------原创 2011-11-11 23:56:31 · 1369 阅读 · 3 评论