对于一个算法而言,运行时所花费的时间越短,算法的质量自然越佳。
(算法时长对于大型3D游戏非常重要,当然了,有时候也不必过分计较)
但是如何计算我的算法时长呢?掐秒表?显然不可能。
方法肯定是有的,就是调用Windows的API。
FreePascal提供了Windows单元,其中封装了绝大部分的常用API。
其中就有我们需要用到的这几个命令。
命令名称=================来自单元========说明========用法
QueryPerformanceFrequency==Windows========取得CPU的频率(你可以在我的电脑-属性看到他的大致值,这里是精确值)
QueryPerformanceFrequency(某变量:Int64) //这个变量用于储存返回值
QueryPerformanceCounter====Windows========取得系统的时钟值
QueryPerformanceCounter(某变量:Int64) //这个变量用于储存返回值
Exec===================Dos============运行外部程序
Exec(程序,参数);
简单说明下方法。Windows自带一个计时器,处理器每运行一个周期,计时器就会加1。注意这个计时器一开机就会不断运行,不会停止,所以数值很大,要用Int64来储存。
那么要知道我程序运行的时长就要这样,弄两个变量a,b
QueryPerformanceCounter(a);
运行程序……………………
QueryPerformanceCounter(b);
再b-a就是运行这个程序所花费的时间了。
但是这个结果还不是时间,准确的说是处理器经过的周期。
于是时间就是 (b-a)/处理器频率
下面是源码:
program ProgramTimer;//名称随便
uses Windows,Dos;//用到了这两个单元
Var CPUFrq:Int64;//储存处理器频率
TimeS:Int64;//记录开始的时间
TimeE:Int64;//记录结束的时间
ElapsedTime:Double;//计算流逝时间
begin
QueryPerformanceFrequency(CPUFrq);//取得处理器频率
QueryPerformanceCounter(TimeS);//取得计数器的值
Exec('C:\1.exe','');//这里执行你的程序、过程、函数
QueryPerformanceCounter(TimeE);//取得计数器的值
ElapsedTime:=(TimeE-TimeS)/CPUFrq;//计算流逝时间
//注意:最后的结果精确到微秒级别,乘上1000就是毫秒,以此类推
writeln(ElapsedTime);//输出,不多说了
end.
呼呼 终于写完了~~~
(算法时长对于大型3D游戏非常重要,当然了,有时候也不必过分计较)
但是如何计算我的算法时长呢?掐秒表?显然不可能。
方法肯定是有的,就是调用Windows的API。
FreePascal提供了Windows单元,其中封装了绝大部分的常用API。
其中就有我们需要用到的这几个命令。
命令名称=================来自单元========说明========用法
QueryPerformanceFrequency==Windows========取得CPU的频率(你可以在我的电脑-属性看到他的大致值,这里是精确值)
QueryPerformanceFrequency(某变量:Int64) //这个变量用于储存返回值
QueryPerformanceCounter====Windows========取得系统的时钟值
QueryPerformanceCounter(某变量:Int64) //这个变量用于储存返回值
Exec===================Dos============运行外部程序
Exec(程序,参数);
简单说明下方法。Windows自带一个计时器,处理器每运行一个周期,计时器就会加1。注意这个计时器一开机就会不断运行,不会停止,所以数值很大,要用Int64来储存。
那么要知道我程序运行的时长就要这样,弄两个变量a,b
QueryPerformanceCounter(a);
运行程序……………………
QueryPerformanceCounter(b);
再b-a就是运行这个程序所花费的时间了。
但是这个结果还不是时间,准确的说是处理器经过的周期。
于是时间就是 (b-a)/处理器频率
下面是源码:
program ProgramTimer;//名称随便
uses Windows,Dos;//用到了这两个单元
Var CPUFrq:Int64;//储存处理器频率
TimeS:Int64;//记录开始的时间
TimeE:Int64;//记录结束的时间
ElapsedTime:Double;//计算流逝时间
begin
QueryPerformanceFrequency(CPUFrq);//取得处理器频率
QueryPerformanceCounter(TimeS);//取得计数器的值
Exec('C:\1.exe','');//这里执行你的程序、过程、函数
QueryPerformanceCounter(TimeE);//取得计数器的值
ElapsedTime:=(TimeE-TimeS)/CPUFrq;//计算流逝时间
//注意:最后的结果精确到微秒级别,乘上1000就是毫秒,以此类推
writeln(ElapsedTime);//输出,不多说了
end.
呼呼 终于写完了~~~