升级64位后,一直有这样一个问题被卡壳:就是系统运行时间GetTickCount()的计算问题。
由于原来32位的时候,这个数值是DWORD类型,大概运行49.7天左右,就会达到最大值,在控制台就会出现警示提示。
代码里,客户端和服务端都大量使用这个函数,用来做心跳时间和时间差计算,想全部改成支持几乎无限时间的GetTickCount64(),改的地方太多太多了,很多数据类型和函数参数都要全部改。因此,一直不敢碰。
前几天,看到有几个独立在函数内部的GetTickCount()函数和变量,不影响全局运行,于是顺手改了一下。
改了一些后,发现没什么大问题。于是,心一硬,接着改其他的。后来,发现越改越麻烦,越改关联的地方越多,已经无法暂停,暂停就彻底无法正常运行了。
硬着继续改,改了客户端,继续改服务端。
如此反复,改了好多次,发现还有很多地方变量类型不兼容的。
改完了,编译运行,幸好,能进去游戏,但是发现计时混乱了,技能无法使用,怪物移动会被卡住。
找了很久,都无法找到原因。最后,实在没办法,只好让动用AI去扫描整个项目的C++代码,找出有问题的代码。
其实AI也无法精确定位,不过幸好给出一些类型不匹配提示和转换类型后的计算结果错误的提示。跟着这些提示,又改了一些。
抱着死马当活马医的心态,又编译跑了一下,发现时钟恢复正常了,怪物走动也正常了。
我大概看了下,应该是ULONGLONG和ULONG之间的运算和转换出现问题的。
估计用人工排查的话,不知道何年何月的事情,这种重复繁琐的,还是用AI辅助扫描代码,更容易修正一些潜在不容易发现的问题。
目前,暂时能正常运行了,希望不会再有其他问题了。
如果改动成功的话,服务器就可以长年运行不用重启,也不会报这个时钟错误的问题了。
海盗王修改GetTickCount引发的计时问题
张小明
前端开发工程师
Postman-win64-7.3.5-Setup安装配置教程(Windows 详细版)
一、准备工作 找到安装包 安装包下载:https://pan.quark.cn/s/af99e0689d9e,下好 Postman-win64-7.3.5-Setup.exe后放桌面或固定文件夹。 用管理员身份运行(推荐) 右键安装包 → 选 "以管理员身份运行",…
turtle绘图 python艺术画露营艺术画
turtle绘图 python艺术画 代码画图python turtle 花花漫画图 代码画图python turtle 花花漫画图,完全用代码实现,1:1复原实现,各种图形图画都可以 有需要的欢迎私可跳转抖🎶查看运行效果 https://v.douyin.com/89YsKBGS6e8/ daA:/…
Dify 实战教程:从零部署到构建 AI 应用全流程详解
本文面向有一定开发基础的读者,涵盖 Dify 的核心概念、Docker 部署、知识库配置、Workflow 搭建,以及通过 API 接入自己系统的完整流程。 一、Dify 是什么? Dify 是一个开源的 LLM 应用开发平台,定位是让开发者快速构建、部署、运…
NSK MPFD 2002-4 滚珠丝杠技术手册
型号 MPFD 2002-4 属于 sources 中 NSK 的内循环式微型滚珠丝杠系列。 | 编码 | 属性 | 数据 | 内容 | |------|------|--------|------| | A | 联 | 133 | 许 | | B | 系 | 2798 | 经 | | C | 我 | 2959 | 理 |与您上一条查询的同尺寸间隙品&a…
写给工控行业朋友的一些话
引言 作为ESim电工仿真的作者,我写下这段话时,内心满是悲愤与愧疚。我曾以为,凭一腔热血和一身技术,总能在这行安身立命;但随着对行业理解的深入,我越发感到窒息和绝望——中国工控软件的命门,正…
从‘Hello World’到打印金字塔:我的C语言入门项目实战复盘(附VS2022调试技巧)
从‘Hello World’到打印金字塔:我的C语言入门项目实战复盘(附VS2022调试技巧)第一次在屏幕上打印出完美对称的数字金字塔时,那种成就感至今难忘。作为刚学完C语言基础语法的开发者,我原以为掌握了for循环和printf就足…