GetSystemTimeAsFileTime 调用使用__int64参数

GetSystemTimeAsFileTime call using __int64 param

本文关键字:int64 参数 调用 GetSystemTimeAsFileTime      更新时间:2023-10-16

我的问题是学术性的。 谁能告诉我,如果我尝试快捷方式并使用__int64参数直接在调用中使用GetSystemTimeAsFileTime(),为什么会更改几个最少的 sig 位?

FILETIME fileTimeUTC;
__int64  timeUTC_64;
__int64  timeUTC_64Test;
GetSystemTimeAsFileTime(&fileTimeUTC);    
memcpy(&timeUTC_64, &fileTimeUTC, sizeof(__int64 ));
GetSystemTimeAsFileTime((FILETIME*)&timeUTC_64Test);
ATLASSERT(sizeof(__int64) == sizeof(FILETIME)); // okay
ATLASSERT(timeUTC_64 == timeUTC_64Test); // FAILS !

您会看到低阶位的微小差异,仅仅是因为系统时间在两次调用之间前进了少量(可能约为几微秒)。 仅获取当前系统时间就需要非无限小的时间。

此外,正如FILETIME结构的文档所指出的那样,您不应该在这里对FILETIME实例进行任何转换:

不要将指向FILETIME结构的指针强制转换为ULARGE_INTEGER*__int64*值,因为它可能会导致 64 位 Windows 上的对齐错误。

如果您需要对FILETIME实例进行数学运算,只需使用 实例并将其手动转换为 64 位值,以避免在 64 位窗口上出现对齐错误的可能性。