C++
draracle
这个作者很懒,什么都没留下…
展开
-
Windows下面获取64位的1ms授时(timeGetTime64)
Windows下如何获取高精度(1ms)的64位毫秒值。原创 2022-05-07 15:27:34 · 644 阅读 · 0 评论 -
路由器NAT超时设置引起的APP的TCP长连接丢失
之前碰到一个奇怪的现象,玩家在打战场的时候,由于一场打下来时间比较长,结果战斗结束之后,丢失了与Portal Server的连接,但奇怪的是没有收到任何连接丢失的事件。能成功发送消息,但服务器收不到,也无法收到从服务器来的消息。先以为是切后台之后连接被系统回收了,但反馈是根本没有任何切后台的操作。于是怀疑是不是客户端的网络的线程模型有问题,检查之后,发现线程模型没有大毛病,而且线程也是在很正常的运行。只是没有收到任何连接丢失的事件。随着收集的样本越来越多,发现一个共同点,就是这些APP都是在WIFI原创 2022-02-08 11:32:44 · 1777 阅读 · 0 评论 -
C/C++ 中random的精度
其实这种伪随机数的精度是很差的,如果做一个实验就可以得到结果,随机一万次,检测小于10%的概率,通常来讲,这个结果的离散性会非常的大,设定10%的触发概率通常会得到大于10%的概率,这个其实非常糟糕,特别是小精度,会让设计前功尽弃。如何解决这个问题?其实最简单的办法就是随机两次,然后相乘求余。比如,我要求10000的范围,那么用random求两次结果int random1 = random() % 10000;int random2 = random() % 10000;int resu原创 2022-01-17 15:48:57 · 288 阅读 · 0 评论 -
一个默认operator=引起的C++服务器随机崩溃,以及对应的小技巧
今天在对服务器进行更新的时候发现更新服务器崩溃了,而且崩溃的还很频繁,每次重启程序之后没多久就会崩溃,又是崩溃的问题,这让我很头疼。又是那种随机位置崩溃,而且没有任何规律可言。同样的,引起了堆内存的损坏,无法获取到dmp文件和log文件。第一时间,能下的判断是内存问题。就是不知道是写越界还是其他错误。还是老规矩,给这个程序打开page heap,用vs来调试,发现每次都是在创建或则删除对象的时候崩溃。而且几乎都是对成员变量的内存操作出错,比如临界区,vector之类的,这一点就可以排除是缓冲区溢出的问.原创 2021-08-30 18:17:09 · 248 阅读 · 0 评论 -
Win32 C++ 服务器的堆内存被破坏的一次调试经历
昨天公司项目做小规模的测试,测试功能以及真实环境中的服务器稳定性,开服半小时后,战场服务器崩溃。崩溃的时候没有任何日志留下,按正常情况,我们服务器的每一个线程都有异常捕获机制,并能将现场dump出来,保存为dmp文件,并将调用堆栈打印出来,保存为log文件。但任何日志都没有被留下。碰到这个情况让我非常的头疼,因为毫无疑问,导致这种问题的原因肯定是和堆被破坏有关,堆被破坏后,任何有内存分配的行为都将失败。我不得不在服务器上装好vs的社区版,只安装调试工具,大概1.9个g的空间需求对服务器60g的硬盘也原创 2021-08-20 15:28:58 · 322 阅读 · 0 评论 -
一个导出lua堆栈内数据的例子,可以用来辅助开发
今天为了让脚本程序调试方便,给他们写了一个导出lua堆栈的辅助函数,用起来挺方便的,可以导出常用的类型,包括表,和表的嵌套。//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"a_string gluon::CStackDumper::Dump(CScriptDevice* device, int offset){ //TODO Auto-generated method stub a_s原创 2021-07-20 15:51:31 · 172 阅读 · 0 评论 -
将 C++ 使用的 boost 序列化协议导出到 Unity C#
如果不使用Protobuff这类的工具,想在C++与其他语言之间共享数据似乎是一个大工程,需要写很多的的代码。Protobuff这类工具本身也具有一些问题,比如过度包装,内存,效率等等。而且引入一大堆库也增加了维护难度。C++有自身的序列化方式,最常见的就是Boost提供的序列化方法(使用C++模板),好用,代码量少,而且简单,而且很容易就可以将这种方法迁移到其他工程里。但这个方法有个问题,几乎不可能将这种方法复制到其他语言环境内。例如C#,本身就不支持模板,而是一种泛型的思路。所以,这种序列化方法注定是c原创 2021-04-28 14:55:33 · 185 阅读 · 0 评论 -
使用GeoGebra来进行项目辅助开发
在开发包围盒寻路算法的过程中,经常碰到一个问题,就是虽然抓到了现场的数据,但是想通过数据还原场景就需要非常多的功夫,特别是还要想办法将地形绘制出来,往往这一步最耗时间,而且还可能因为绘制不精确导致某些线索的丢失。于是萌生了借助某些软件来实现现场还原的想法。最开始想用cad软件,但cad软件虽然可以支持命令输入,但很少有cad软件太复杂了,用起来很不习惯。后来在网上找到一个软件:GeoGebra几何。这个软件非常轻量级,但很好用,是一款数学绘图软件,虽然不支持直接批量输入绘图命令,但支持给对象导入js脚本原创 2021-06-21 18:42:34 · 1244 阅读 · 0 评论 -
几何计算中的bug:必须合理设置float tolerance
之前在项目中实现了一套基于包围盒的寻路算法,但前几天无意中发现一个bug,导致角色被粘在一个圆形上,根据检查,发现是计算线段与圆交点时出的错,计算交点的算法给出了两个点的结果,但是判断是否在线段上时,b...原创 2021-06-17 10:37:10 · 151 阅读 · 0 评论 -
关于std hash的一个小问题
如果对字符串进行hash求值,那么注意别对hash<const char *>求值,而用hash<string>来求值。因为第一个是地址,di原创 2021-06-01 17:56:04 · 143 阅读 · 0 评论