我试图理解Windows中的各种高精度计时技术,并使用C ++直接挂钩到various APIs。
我知道QPC并且知道GetSystemTimePreciseAsFileTime()使用相同的技术来获得高精度时间戳。但是,GetSystemTimeAsFileTime() API似乎是used by SQL Server to get its high precision timestamps(即DATETIME2),我发现它很奇怪。
注意:一篇非常好的资源是Acquiring high-resolution time stamps msdn文章(虽然它可能更像是一篇“论文”)。
GetSystemTimePreciseAsFileTime() GetSystemTimePreciseAsFileTime函数检索当前系统 具有最高精度水平的日期和时间(<1us)。该 检索到的信息采用协调世界时(UTC)格式。
我的问题是SYSTEMTIME structure
指定日期和时间,使用月,日,年,工作日,小时,分钟,秒和毫秒的各个成员。时间是以协调世界时(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类型实现自定义转换似乎是一项艰巨的任务?
答案 0 :(得分:0)
额外转换非常简单 - sub
为您提供SYSTEMTIME无法完成的操作(以100ns为步骤)。所以你可以使用它加上SYSTEMTIME。
虽然SYSTEMTIME主要用于UI;最初的FILETIME存储起来较小,可以用于多种用途。