我正在测试我的同事提供的一个代码,我需要测量执行一个例程的时间,而不是执行上下文切换(线程)。
衡量时间的最佳选择是什么?我知道可以使用高分辨率计时器,
QueryPerformanceCounter
QueryPerformanceFrequency
但是如何使用该定时器将其转换为毫秒或纳秒?
答案 0 :(得分:3)
LARGE_INTEGER lFreq, lStart; LARGE_INTEGER lEnd; double d; QueryPerformanceFrequency(&lFreq); QueryPerformanceCounter(&lStart); /* do something ... */ QueryPerformanceCounter(&lEnd); d = ((doublel)End.QuadPart - (doublel)lStart.QuadPart) / (doublel)lFreq.QuadPart;
d是以秒为单位的时间间隔。
答案 1 :(得分:1)
由于我执行的操作大约是500纳米,而且定时器没有精确度,我所做的是,
我使用GetTickCount()保存了实际时间 - (使用〜12milis的精度)并执行路径N_TIMES(执行常规的次数),直到我在控制台上按下某些内容为止。
再次计算时间,并将差值除以N_TIMES,类似:
int static counter;
void routine() { //这里的运作.. 计数器++; }
int main(){
start< - GetTickCount(); handle< - createThread(.....,routine,...);
resumeThread(手柄);getchar();
WaitForSingleObject(handle,INFINITE);
Elapsed =(GetTickCount() - start)* 1000000.0)/ counter; printf(“Nanos:%d”,已过去); }
:)