Delphi实现毫秒级别的倒计时实例代码
来源:本站原创|时间:2020-01-10|栏目:Delphi|点击: 次
本文以实例简述了Delphi实现毫秒级别倒计时的方法。一般来说可以获得系统的高性能频率计数器在一毫秒内的震动次数,如果时钟震动次数超过10毫秒的次数则刷新edit3的显示,显示从开始记数到记数实际经过的时间,具体实现代码如下:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, mmsystem; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Timer1: TTimer; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; acttime1,acttime2:cardinal; smmcount,stimercount,spcount:single; htimeid:integer; iten:integer; protimecallback:tfntimecallback; procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall; procedure proendcount; implementation {$R *.DFM} //timesetevent的回调函数 procedure proendcount; begin acttime2:=gettickcount-acttime1; form1.button2.enabled :=false; form1.button1.enabled :=true; form1.timer1.enabled :=false; smmcount:=60; stimercount:=60; spcount:=-1; timekillevent(htimeid); end; procedure timeproc(utimerid, umessage: uint; dwuser, dw1, dw2: dword) stdcall; begin form1.edit2.text:=floattostr(smmcount); smmcount:=smmcount-0.01; end; procedure TForm1.FormCreate(Sender: TObject); begin button1.caption :='开始倒计时'; button2.caption :='结束倒计时'; button2.enabled :=false; button1.enabled :=true; timer1.enabled :=false; smmcount:=60; stimercount:=60; spcount:=60; end; procedure TForm1.Button1Click(Sender: TObject); var lgtick1,lgtick2,lgper:tlargeinteger; ftemp:single; begin button2.enabled :=true; button1.enabled :=false; timer1.enabled :=true; timer1.interval :=10; protimecallback:=timeproc; htimeid:=timesetevent(10,0,protimecallback,1,1); acttime1:=gettickcount; //获得系统的高性能频率计数器在一毫秒内的震动次数 queryperformancefrequency(lgper); ftemp:=lgper/1000; iten:=trunc(ftemp*10); queryperformancecounter(lgtick1); lgtick2:=lgtick1; spcount:=60; while spcount>0 do begin queryperformancecounter(lgtick2); //如果时钟震动次数超过10毫秒的次数则刷新edit3的显示 if lgtick2 - lgtick1 > iten then begin lgtick1 := lgtick2; spcount := spcount - 0.01; edit3.text := floattostr(spcount); application.processmessages; end; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin edit1.text := floattostr(stimercount); stimercount:=stimercount-0.01; end; procedure TForm1.Button2Click(Sender: TObject); begin proendcount; //显示从开始记数到记数实际经过的时间 showmessage('实际经过时间'+inttostr(acttime2)+'毫秒'); end; end.
您可能感兴趣的文章
- 01-10在Delphi实现在数据库中存取图像的图文演示无错
- 01-10delphi建立、读取、存贮INI文件的方法《三》
- 01-10Delphi Command模式
- 01-10delphi 正弦曲线图
- 01-10delphi建立、读取、存贮INI文件的方法《二》
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判断文件是否为文本文件的函数
- 01-10delphi中一个值得大家来考虑的DLL问题
- 01-10初探Delphi中的插件编程
阅读排行
本栏相关
- 01-10在Delphi实现在数据库中存取图像的图
- 01-10delphi建立、读取、存贮INI文件的方法
- 01-10delphi 正弦曲线图
- 01-10Delphi Command模式
- 01-10delphi建立、读取、存贮INI文件的方法
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判断文件是否为文本文件的函
- 01-10delphi中一个值得大家来考虑的DLL问题
- 01-10初探Delphi中的插件编程
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 01-11ajax实现页面的局部加载
- 01-10SublimeText编译C开发环境设置
- 01-10delphi制作wav文件的方法
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05dedecms(织梦)副栏目数量限制代码修改