9

我有一个关于 GetTickCount 函数的问题,我的代码中有两个调用这个函数,它们之间有几个命令,两个调用中的函数返回相同的计数。IE

var1 = GetTickCount();
code
:
:
var2 = GetTickCount();

var1 和 var2 具有相同的值。

有人可以帮忙吗?

4

5 回答 5

18

假设这是 Windows GetTickCount调用,这是完全合理的:

GetTickCount 函数的分辨率受限于系统计时器的分辨率,通常在 10 毫秒到 16 毫秒的范围内。

请注意,它只是开始测量毫秒- 而这些天你可以在一毫秒内做很多事情。

文档继续说:

如果您需要更高分辨率的计时器,请使用多媒体计时器高分辨率计时器

也许QueryPerformanceCounter会更合适?

于 2010-08-10T20:14:01.730 回答
7

如果您指的是 Windows API 调用,请阅读内容。我猜你是在尝试短时间间隔,所以这一段是相关的。你的时间比那个间隔更短吗?如果是这样,也许可以改用 QueryPerformanceCounter。

GetTickCount 函数的分辨率受限于系统计时器的分辨率,通常在 10 毫秒到 16 毫秒的范围内。GetTickCount 函数的分辨率不受 GetSystemTimeAdjustment 函数所做的调整的影响。

于 2010-08-10T20:14:28.907 回答
5

如果你走 QueryPerformanceCounter 路线,你需要注意硬件相关的怪异。已经有一段时间了,不知道这种事情还会不会发生。

您可能还想看看这个链接,因为它有一个很好的示例应用程序,它比较了 QueryPerformanceCounter、GetTickCount 和 TimeGetTime

于 2010-08-10T20:47:18.697 回答
2

来自MSDN

GetTickCount 函数的分辨率受限于系统计时器的分辨率,通常在 10 毫秒到 16 毫秒的范围内。GetTickCount 函数的分辨率不受 GetSystemTimeAdjustment 函数所做的调整的影响。

经过的时间存储为 DWORD 值。因此,如果系统连续运行 49.7 天,时间将归零。若要避免此问题,请使用 GetTickCount64 函数。否则,在比较时间时检查溢出情况。

如果您需要更高分辨率的计时器,请使用多媒体计时器或高分辨率计时器。

于 2010-08-10T20:14:32.830 回答
1

GetTickCount 的分辨率为一毫秒(实际上是几毫秒)。您在两者之间调用的函数很可能花费了不到 1 毫秒的时间。

于 2010-08-10T20:14:31.593 回答