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()在哪里?

windows下的计算时间间隔 -- GetTickCount()

Windows 计算程序运行时间(高精度计时)

GetTickCount()函数

c++11测试时间封装