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

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

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

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

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

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

rocedure TForm4.FormCreate(Sender :TObject);
var
I :UInt64;
NowTick :LongWord; OutSec :Word; procedure Judge1();
var
Tmp :UInt64;
begin
Tmp := I + OutSec * ; //时长右边界 if Tmp > LongWord.MaxValue then begin
if (I > NowTick) and (NowTick > Tmp - Longword.MaxValue) then
ShowMessage('ok2');
end
else begin
if NowTick >= I then begin
if NowTick > Tmp then
ShowMessage('ok1');
end
else
ShowMessage('ok3');
end;
end; begin
I := ; //i是时长左边界
OutSec := ; //超时秒数
NowTick := ; //当前时间
Judge1(); I := ;
OutSec := ;
NowTick := ;
Judge1(); I := ;
OutSec := ;
NowTick := ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := Longword.MaxValue - ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := Longword.MaxValue - ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := Longword.MaxValue - ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := Longword.MaxValue - ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := Longword.MaxValue - ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := ;
Judge1(); I := Longword.MaxValue - ;
OutSec := ;
NowTick := ;
Judge1(); end;

解决GetTickCount的问题的更多相关文章

  1. 解决 WinXP下 libcurl.dll 无法定位程序输入点GetTickCount64问题

    1. 问题描述 用 IDA 打开libcurl.dll 可以在导入表看到对 GetTickCount64的引用,在 xp 的kernel32.dll中没有 GetTickCount64, 所以会出现  ...

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

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

  3. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  4. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  5. DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享

    DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...

  6. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  7. java中文乱码解决之道(一)-----认识字符集

    沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...

  8. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  9. 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)

           首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...

随机推荐

  1. iis7 未注册framework4 导致 莫名的404错误

    server2008  R2 IIS7 已经安装 安装framework 4.6.1 然后建立站点 404错误 :在站点目录自动生成了  asp_client 重新注册到 iis(不需要) iisre ...

  2. 如何在 Azure 虚拟机里配置条带化

    什么是条带化(striping) 条带 (strip) 是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法.简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法. 许 ...

  3. ORM------多表操作

    上面介绍了单表操作 下面就好比我们的sql语句这只能满足于我们的一些简单的操作不能适应我们更多的需要 所以我们需要用到更多的需求来进行我们的关系的建立以及查找 其实ORM语句就对应着我们的sql语句  ...

  4. iso、ios、osi的区别

    ISO  国际标准化组织(International Organization for Standardization)简称ISO,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织.IS ...

  5. 乘风破浪:LeetCode真题_004_Median of Two Sorted Arrays

    乘风破浪:LeetCode真题_004_Median of Two Sorted Arrays 一.前言 说到算法,最难的就是一些需要通过分析得到一些递推公式或者有用的结论,进而用来解决问题的方法了. ...

  6. December 21st 2016 Week 52nd Wednesday

    Keep conscience clear, then never fear. 问心无愧,永不畏惧. I find it is very difficult for me to keep consci ...

  7. 判断元素(expected_conditions)

    判断元素 如何判断一个元素是否存在,如何判断 alert 弹窗出来了,如何判断动态的元素等等一系列的判断,在 selenium 的 expected_conditions 模块收集了一系列的场景判断方 ...

  8. angular.js中提供的基础方法

    angular.bind angular.callbacks angular.equals /* *Determines if two objects or two values are equiva ...

  9. canvas图形库

    总结了一些canvas绘制2d图形的方法,记录在博客中,以便需要的同学参考,也便于日后加深记忆. 1. 圆角矩形: 如上图:w表示矩形的宽,h表示矩形的高,r表示矩形圆角的半径.整个矩形在画布中,(0 ...

  10. pythone 请求响应字典

    _RESPONSE_STATUSES = { # Informational 100: 'Continue', 101: 'Switching Protocols', 102: 'Processing ...