我试图了解Windows中的各种高精度计时技术,并将其直接连接到各种API和C++中。
我知道QPC,并且知道GetSystemTimePreciseAsFileTime()对高精度的时间戳使用了相同的技术。然而,GetSystemTimeAsFileTime() API似乎是SQL Server用于获得其高精度时间戳 (即DATETIME2),我觉得这很奇怪。
注意:纸._是一个非常好的资源。
GetSystemTimePreciseAsFileTime() -- GetSystemTimePreciseAsFileTime函数以尽可能高的精度(<1U)检索当前的系统日期和时间。检索到的信息采用协调世界时(UTC)格式。
我的问题是系统结构
指定日期和时间,为月、日、年、工作日、小时、分钟、秒和毫秒使用单个成员。时间是以协调的世界时间(UTC)或本地时间为单位,具体取决于正在调用的函数。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
这个结构的文档似乎只有毫秒的精度,对结构的wMilliseconds部分进行了注释:
wMilliseconds毫秒。此成员的有效值为0至999。
如果我想将高精度的FILETIME转换成某种SYSTEMTIME结构,我如何保持额外的精度?从FILETIME类型实现自定义转换似乎是一项大任务?
发布于 2015-09-27 20:16:49
额外的转换非常容易-- (fileTime % 10000)
提供了SYSTEMTIME没有的内容(在100 is的步骤中)。所以你可以用它加上一个SYSTEMTIME。
虽然SYSTEMTIME主要用于UI;原始的FILETIME存储起来更小,而且更容易用于多种用途。
https://stackoverflow.com/questions/32812334
复制相似问题