delphi 时间相关

DELPHI高精度计时方法


//取毫秒级时间精度(方法一):
  var
    t1,t2:int64;
    r1:int64;
  begin
    t1:=GetTickCount;//获取开始计数 WINDOWS API
    sleep(1000);{do...}//执行要计时的代码
    t2:=GetTickCount;//获取结束计数值
    r1:=t2-t1;//取得计时时间,Y\`国4~络(}.u_%t"hV单位毫秒(ms)
    showmessage(inttostr(r1));
  end;

  //取毫秒级时间精度(方法二):
  //use DateUtils;//引用DateUtils单位
  var
    t1,t2:tdatetime;
    r1:int64;
  begin
    t1:=now();//获取开始计时时间
    sleep(1000);{do...}//执行要计时的代码
    t2:=now();//获取结束计时时间
    r1:=SecondsBetween(t2,t1);//取得计时时间,D6k=+W的TsoUbP育_II单位秒(s)
    r1:=MilliSecondsBetween(t2,t1);//取得计时时间,

  单位毫秒(ms)
    showmessage(inttostr(r1));
  end;

  //注:以上两种方式经本人测试好像只能产生0.01秒的计时精度

  //取系统级时间精度:
  var
    c1:int64;
    t1,t2:int64;
    r1:double;
  begin
    QueryPerformanceFrequency(c1);//WINDOWS API   返回计数频率(Intel86:1193180)(获得系统的高性能频率计数器在一毫秒内的震动次数)
    QueryPerformanceCounter(t1);//WINDOWS API 获取开始计数值
    sleep(1000);{do...}//执行要计时的代码
    QueryPerformanceCounter(t2);//获取结束计数值
    r1:=(t2-t1)/c1;//取得计时时间,


  单位秒(s)
    r1:=(t2-t1)/c1*1000;//取得计时时间,单位毫秒(ms)
    r1:=(t2-t1)/c1*1000000;//取得计时时间,单位微秒
    showmessage(floattostr(r1));
  end;


delphi 延迟函数


//延迟函数:方法一
procedure delay(msecs:integer);
var 
  Tick: DWord; 
  Event: THandle; 
begin 
  Event := CreateEvent(nil, False, False, nil); 
  try 
    Tick := GetTickCount + DWord(msecs); 
    while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do 
    begin 
      Application.ProcessMessages; 
      msecs := Tick - GetTickcount; 
    end; 
  finally 
    CloseHandle(Event); 
end; 

  
//延迟函数:方法二
procedure Delay(dwMilliseconds:DWORD);//Longint
var
iStart,iStop:DWORD;
begin
    iStart :=   GetTickCount;
    repeat
    iStop  :=   GetTickCount;
    Application.ProcessMessages;
    until (iStop  -  iStart) >= dwMilliseconds;
end;


方法三
procedure delay(msecs:integer); //延迟函数 比sleep好
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(msecs);
while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
msecs := Tick - GetTickcount;
end;
finally
CloseHandle(Event);
end;

一段代码执行消耗的时间


 关键是用到一个库函数GetTickCount

【函数名】 GetTickCount

【返回值】 Long,以毫秒为单位

通常用来计算某个操作所使用的时间: 
var:

    start_time : LONG;

    stop_time:LONG;

begin:
start_time :=GetTickCount;

调用接口操作
stop_time :=GetTickCount;

ShowMessage( IntToStr(stop_time - art_time));
end;


获取系统时间


var
DateTime:TDateTime;
i:string;
begin
DateTime:=now;
i:=DateToStr(DateTime)+' '+TimeToStr (DateTime);
lable1.caption:=i;


FormatDateTime('hh:nn:ss',Now());
FormatDateTime('yyyy年mm月dd日 hh时nn分ss秒zzzz',now());

var
DateTime:TDateTime;
i:string;
ct:TSystemTime;
begin
DateTime:=now;
i:=DateToStr(DateTime)+' '+TimeToStr (DateTime);
//Label1.caption:=i;
//Label1.caption:=FormatDateTime('yyyy年mm月dd日 hh时nn分ss秒zz',now());
//GetSystemTime();
//GetLocalTime(ct);
//Label1.caption:=GetSystemTime(ct);//FormatDateTime('yyyy年mm月dd日 hh时nn分ss秒zz',GetSystemTime(ct));
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再创世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值