我想将一个计算过程所用了的时间计出来(10分)

  • 主题发起人 主题发起人 nter
  • 开始时间 开始时间
N

nter

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将一个计算过程所用了的时间计出来,我已设了两个TDATETIME类型的
变量,过程开始时,NOW1:=NOW;过程结束后,NOW2:=NOW;然后将
TIMETOSTR(NOW2-NOW1),但怎会是00:00:00,是不是那个计算过程
但快了,只有毫秒级,那怎样才能做到这功能
 
用GetTickCount(VOID)

程序前寄入,程序后再用一次,然后减
 
嘻嘻,把这个unit加进去吧。 两种实现方法 clockon - clockoff

clockonnew - clockoffnew,试试啦

unit myDebug;

interface

uses SysUtils,Dialogs,Windows;

procedure ClockOn;
procedure ClockOff;
procedure ClockOnNew;
procedure ClockOffNew;

implementation
var
fResolution,fStart:TLargeInteger;
{ ʹÓ&Atilde
Windows µÄ¸ß¾«¶È¼ÇʱÆ÷ }
fStartEx :Int64
procedure ClockOn;
begin
QueryPerformanceFrequency(fResolution);
QueryPerformanceCounter(fStart);
end;

procedure ClockOff;
var
//fElapsed:TDateTime
fEnd :TLargeInteger;
begin
QueryPerformanceCounter(fEnd);
ShowMessage(format('%.3f 秒,%d 单位',[(fEnd-fStart)/fResolution,fEnd-fStart]));
//fElapsed :=Time - fstart;
//ShowMessage(FormatDateTime('hh:nn:ss',fElapsed ));
end;

procedure ClockOnNew ();
begin
fStartEx := GetTickCount;
end;

procedure ClockOffNew ();
var fA:Int64;
begin
fA:=GetTickCount - fStartEx;
ShowMessage(format('%d',[fA]));
end;
 
NOW1 := NOW;
把计算过程重复10000次。
NOW2 := NOW;
 
GetTickCount 返回自Windows启动至今的毫秒数.
var
PreCount, ElapsedTime: DWORD;
.
.
.
PreCount := GetTickCount;
...//Your Calculate section.

ElapsedTime := GetTickCount - PreCount;
label1.Caption := DateTimetoStr(TimeStampToDateTime(MSecsToTimeStamp(ElapsedTime)));
 
是因为执行时间太短了,我用了1000000次循环才等到5毫秒的差距,建议用gettickcount函数,用now通过Format('zzz',now2-now1)出现的误差可能太大
 
接受答案了.
 
后退
顶部