其实关于这个讨论已经很多了,去百度知道搜一下就看得见。最近写东西需要精确计量程序的运行时间,自己写了一个类,又改写了一个用部分汇编写的类。我写的那个大约在millisecond级,另一个估计起码microsecond级,不过在AMD处理器的机器上偶尔回测不准,他用了Intel 汇编指令。
点击下载源程序 (8k),(放在我的google pages 上的)
算了,不用去下载了,好麻烦的。
点击下载源程序 (8k),(放在我的google pages 上的)
算了,不用去下载了,好麻烦的。
for(int testIndex = 0; testIndex < testTimes; testIndex++)
{
//do something<br>
DoSomething();
}
timer -= clock();
printf("totol time:%ld,run one time cost:%f"
, timer
,((float)timer)/testTimes );
还有一种,既精确又通用的。精度还不大清楚
LARGE_INTEGER startTime;
LARGE_INTEGER endTime;
QueryPerformanceFrequency(&startTime);
//Do something but not evil
DoSomeThing();
QueryPerformanceFrequency(&endTime);
float elapsedTime = (float)endTime.QuadPart
- (float)startTime.QuadPart;
剩下的就不说了
1 条评论:
QueryPerformanceFrequency()是得到每秒的频率,你这样写是错误的。
我给你两个宏:
#define TIMEV_START(timeVar) {LARGE_INTEGER timeStart; LARGE_INTEGER freq; QueryPerformanceFrequency(&freq); timeVar *= freq.QuadPart; if (QueryPerformanceCounter(&timeStart));timeVar -= timeStart.QuadPart;}
#define TIMEV_END(timeVar) {LARGE_INTEGER timeStart; LARGE_INTEGER freq; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&timeStart);timeVar += timeStart.QuadPart; timeVar /= freq.QuadPart;}
发表评论