GetTickCount是一个api,它是反应到从开机到当前的毫秒数,这个很好.可以做一些短途的计时器.

比如说做服务器中对象池计时器,对象超过多少时间就自动释放对象.

但是GetTickCount也有一个麻烦的地方,就是在电脑运行了49.7天之后,数字会置0 ,然后从0开始.这样的话,简单的时间判断可能会造成49.7天后的bug,那么怎办呢?其实可以用一点小技巧就可以解决.

看下面的代码,Judge1是判断函数,

i     是当前的计时点
OutSec  是超时秒数.
NowTick  是当前的Tick,即当前时间点.

可以看到以下的测试代码模拟了几种计时起点和当前的Tick,但是神奇的判断Judge1都可以把时间正确判断.

rocedure TForm4.FormCreate(Sender :TObject);
varI       :UInt64;NowTick :LongWord;OutSec :Word;procedure Judge1();varTmp :UInt64;beginTmp := I + OutSec * 1000;     //时长右边界if Tmp > LongWord.MaxValue then beginif (I > NowTick) and (NowTick > Tmp - Longword.MaxValue) thenShowMessage('ok2');endelse beginif NowTick >= I then beginif NowTick > Tmp thenShowMessage('ok1');endelseShowMessage('ok3');end;end;beginI := 10;          //i是时长左边界OutSec := 2;      //超时秒数NowTick := 2020;    //当前时间
  Judge1();I := 10;OutSec := 2;NowTick := 2010;Judge1();I := 10;OutSec := 2;NowTick := 2009;Judge1();I := Longword.MaxValue - 3000;OutSec := 2;NowTick := Longword.MaxValue - 2000;Judge1();I := Longword.MaxValue - 3000;OutSec := 2;NowTick := Longword.MaxValue - 1000;Judge1();I := Longword.MaxValue - 3000;OutSec := 2;NowTick := Longword.MaxValue - 999;Judge1();I := Longword.MaxValue - 3000;OutSec := 2;NowTick := 5;Judge1();I := Longword.MaxValue - 3000;OutSec := 2;NowTick := Longword.MaxValue - 50;Judge1();I := Longword.MaxValue - 300;OutSec := 2;NowTick := Longword.MaxValue - 50;Judge1();I := Longword.MaxValue - 300;OutSec := 2;NowTick := 20;Judge1();I := Longword.MaxValue - 300;OutSec := 2;NowTick := 1700;Judge1();I := Longword.MaxValue - 300;OutSec := 2;NowTick := 1701;Judge1();end;

转载于:https://www.cnblogs.com/IDELPHI/p/GetTickCount.html

解决GetTickCount的问题相关推荐

  1. javaEE面试重点

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...

  2. mmz-asio4delphi死链接的解决办法

    最近一段时间,因为忙于网络的项目,特意到网上找了些例子,特意花时间研究了一下马敏钊写的 mmz-asio4delphi 感觉很好用,不过深入研究之后,发现一个问题. 马大的这个代码,会产生死链接. t ...

  3. 网络游戏程序中解决加载卡顿的有效方法

    对于3d视频游戏来说,游戏引擎的性能是至关重要的.玩家在体验一款游戏时,游戏的流畅度是最基本的要求.与单机游戏不同,网络游戏更需要考虑性能问题,因为无法像单机游戏那样,控制游戏元素的复杂度来达到效率的 ...

  4. VMware QueryPerformanceCounter/GetTickCount 悬案

    最近发现在VMware的客户机上,两次 QueryPerformanceCounter 相差的数值会特别大.还不知道如何解决.. 测试程序如下 #include <windows.h>DW ...

  5. 使用IHTMLDocument3 的getElementById获取控件总是返回空的解决方法

    调用的参数书写都正确,可是每次调用pElem都返回空指针? CComPtr<IDispatch> pDisp = (IDispatch*)GetDocument(); CComPtr< ...

  6. OpenPlanner变道遇到的问题及解决

    OpenPlanner规划全局路径,如果要支持实时根据环境更新路径(变道.改变路径)需要在op_global_planner中勾选Lane Changing和Replanning两个功能 此外还要在o ...

  7. [Delphi]:解决3DMark闪退及3DMark宕的问题

    为了解决一些3DMark的问题,例如闪退,跑的过程中3DMark程序无响应的.于是就想个办法实现解决这两个问题,也算是下SW workaround的吧.避免不必要的麻烦~ unit main;inte ...

  8. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  9. 解决gitte提交报错 error: GE007: Your push would publish a private email address.

    错误情况: gitte提交报错,无法提交上去,报错如下: remote: Powered by GITEE.COM [GNK-6.0] remote: error: GE007: Your push ...

  10. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

最新文章

  1. 3软件测试原理与软件缺陷
  2. 520这天,我突然意识到,她根本配不上我这么聪明的男人
  3. 使用Struts2上传文件超过2M报错解决方法
  4. jmeter(三)参数化
  5. Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述
  6. 教育部成立校外教育培训监管司 K12迎最强监管 教育中概股再跳水
  7. 忘记commit也会造成select查询的性能问题
  8. mysql没有group by_MySQL:不在GROUP BY中
  9. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---35
  10. KCP - A Fast and Reliable ARQ Protocol
  11. C++中指针优点与线程中指针变量访问
  12. c语言图形显示功能,C语言图形编程(二、图形显示).doc
  13. 阿里云datav自定义组件,引入高德地图API
  14. ArcGIS API For JavaScript 利用GP服务生成等值线、等值面(二)之生成等值面
  15. android svg 线条动画教程,SVG 实现复杂线条动画
  16. 阿里巴巴与山东省人民政府签署战略合作协议
  17. Java开发入门学习线路图+配套Java基础视频教程分享
  18. 第83节:Java中的学生管理系统分页功能
  19. 卸载MySQL残余及修改密码
  20. java中短信验证登录_java实现短信验证码功能

热门文章

  1. ALM11 QC11 官方中文安装包下载
  2. cplex入门系列(二)--- 线性规划求解
  3. 大数据hadoop培训总结
  4. 【Office】Microsoft Office下载地址合集(微软官方原版离线安装下载)
  5. 实现数据库连接池druid的工具类
  6. 微信小程序双层图片swiper滑动(底部图片模糊处理)实现
  7. 酒店管理系统-需求说明书
  8. 【MySQL入门】(一)安装与配置MySQL
  9. excel 汉字转拼音
  10. ASCII码对照表 (0-255)