delphi 代替时间控件

 一、三种方法的简单介绍

1)TTtimer控件

  TTtimer控件的实质是调用Windows   API定时函数SetTimer和KillTimer来实现的,并简化了对WM_TIMER   消息的处理过程。通过设置OnTimer事件和Interval属性,我们可以很方便的产生一些简单的定时事件。

2)Sleep函数

  Sleep函数用来使程序的执行延时给定的时间值。Sleep的调用形式为Sleep(milliseconds),暂停当前的进程milliseconds毫秒。Sleep的实现方法其实也是调用Windows   API的Sleep函数。例如:

sleep(1000);                 //延迟1000毫秒

Sleep会引起程序停滞,如果你延迟的时间较长的话,你的程序将不能够响应延时期间的发生的其他消息,所以程序看起来好像暂时死机。

3)GetTickCount函数

  在主程序中延时,为了达到延时和响应消息这两个目的,GetTickCount()构成的循环就是一种广为流传的方法。例如:

 

procedure Delay(MSecs: Longint); //延时函数,MSecs单位为毫秒(千分之1秒) var FirstTickCount, Now: Longint; begin FirstTickCount := GetTickCount(); repeat Application.ProcessMessages; Now := GetTickCount(); until (Now - FirstTickCount > = MSecs) or (Now < FirstTickCount); end;

 

改进版 var NumSec SmallInt; StartTime: LongInt; begin StartTime := GetTickCount;//用Now的修改系统时间就没效了,这个就不会 repeat Application.ProcessMessages; Sleep(1);//能解决CPU100%的问题 until GetTickCount > StartTime + 毫秒; end; 这个版本非常好用。而南山软件屋的方法在很多情况下有些莫名其妙的问题出现。用Application.HandleMessage并不好。

 

初学者先用TIME玩玩吧, 延时用sleep不是很好 用这个 procedure Delay(msecs: integer); var FirstTickCount: Longint; begin FirstTickCount := GetTickCount; repeat Application.ProcessMessages(); //申请进程 sleep(1); until ((GetTickCount - FirstTickCount) >= Longint(msecs)); end;

你可能感兴趣的:(windows,timer,api,Integer,Delphi,delay)