C GetTickCount(windows函数)到时间(纳秒)
Posted
技术标签:
【中文标题】C GetTickCount(windows函数)到时间(纳秒)【英文标题】:C GetTickCount (windows function) to Time (nanoseconds) 【发布时间】:2010-09-24 12:10:41 【问题描述】:我正在测试我同事提供的一段代码,我需要测量一个例程的执行时间,而不是执行上下文切换(线程)。
测量时间的最佳选择是什么?我知道可以使用高分辨率计时器,例如,
QueryPerformanceCounter
QueryPerformanceFrequency
但是如何使用该计时器将其转换为毫秒或纳秒?
【问题讨论】:
【参考方案1】: LARGE_INTEGER lFreq, lStart; LARGE_INTEGER lEnd; 双 d; 查询性能频率(&lFreq); QueryPerformanceCounter(&lStart); /* 做点什么 ... */ 查询性能计数器(&lEnd); d = ((doublel)End.QuadPart - (doublel)lStart.QuadPart) / (doublel)lFreq.QuadPart;d 是以秒为单位的时间间隔。
【讨论】:
不工作,当执行方法保持接近 10 秒时返回 1.0 我猜它不起作用的原因是上面的代码执行了整数除法,然后将其转换为双精度数。试试d = ((double)(lEnd.QuadPart - lStart.QuadPart)) / lFreq.QuadPart);
看看是否有帮助。
codeguru.com/forum/showthread.php?t=291294 实际上,可以使用 LowPart 代替 QuadPart - 32 位就足够了。
你为什么要投到doublel
?是不是打错字了?【参考方案2】:
由于我正在执行的操作是 500 纳秒,而且计时器没有精度,所以我做的是,
我使用 GetTickCount() 节省了实际时间 - (使用精度约为 12milis)并执行路线 N_TIMES(比例程执行的次数),直到我在控制台上按下某些东西为止。
再次计算时间,然后除以 N_TIMES,如下所示:
int 静态计数器;
无效例程() // 这里的操作.. 计数器++;
int main() 开始 恢复线程(句柄);
getchar();
WaitForSingleObject(handle, INFINITE);
Elapsed = (GetTickCount() - start) * 1000000.0) / 计数器; printf("Nanos: %d", elapsed);
:)
【讨论】:
以上是关于C GetTickCount(windows函数)到时间(纳秒)的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 计时函数getTickCount(); getTickFrequency();
Windows 8 Consumer Preview中的GetTickCount()在哪里?