C ++高分辨率SYSTEMTIME结构,大于ms?

时间:2015-09-27 20:09:06

标签: c++ api time

我试图理解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类型实现自定义转换似乎是一项艰巨的任务?

1 个答案:

答案 0 :(得分:0)

额外转换非常简单 - sub为您提供SYSTEMTIME无法完成的操作(以100ns为步骤)。所以你可以使用它加上SYSTEMTIME。

虽然SYSTEMTIME主要用于UI;最初的FILETIME存储起来较小,可以用于多种用途。