gpt4 book ai didi

c++ - 使用 __int64 参数调用 GetSystemTimeAsFileTime

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:29 26 4
gpt4 key购买 nike

我的问题是学术性的。谁能告诉我为什么如果我尝试使用快捷方式并使用 GetSystemTimeAsFileTime() 直接通过 __int64 参数进行调用,为什么会更改几个最小 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 structure 的文档请注意,您不应该在此处使用 FILETIME 实例进行任何强制转换:

Do not cast a pointer to a FILETIME structure to either a ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows.

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

关于c++ - 使用 __int64 参数调用 GetSystemTimeAsFileTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21078849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com