我的问题是学术问题。如果我尝试使用快捷方式并使用GetSystemTimeAsFileTime()
使用__int64
param直接使用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 !
,有人可以告诉我为什么会更改几个最小的sig位吗?
{{1}}
答案 0 :(得分:5)
您会看到低阶位的一个小差异,因为系统时间在两次调用之间会有一小部分(可能是几微秒的数量级)。获得当前系统时间需要非常少的时间。
另外,作为FILETIME
structure笔记的文档,您应该 在FILETIME
个实例中进行任何投射:
不要将
FILETIME
结构的指针强加到ULARGE_INTEGER*
或__int64*
值,因为它可能会导致64位Windows上的对齐错误。
只需使用FILETIME
实例并手动将其转换为64位值,如果您需要对其进行数学运算,以避免64位窗口出现对齐错误。