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

C++ high resolution SYSTEMTIME Structure, greater than ms?

本文关键字:大于 ms 结构 高分辨率 SYSTEMTIME c++      更新时间:2023-10-16

我试图理解Windows中的各种高精度计时技术,并直接与c++中的各种api挂钩。

我知道QPC,并且知道GetSystemTimePreciseAsFileTime()对高精度时间戳使用相同的技术。然而,GetSystemTimeAsFileTime() API似乎被SQL Server用于获得其高精度时间戳(即DATETIME2),我发现这很奇怪。

注意:一个非常好的资源是获取高分辨率时间戳msdn文章(尽管它可能更像是一篇"论文")。

GetSystemTimePreciseAsFileTime ()GetSystemTimePreciseAsFileTime函数获取当前系统日期和时间具有尽可能高的精度(<1us)。的检索到的信息是协调世界时(UTC)格式。

我的问题是SYSTEMTIME结构

指定日期和时间,对使用单独的成员:月、日、年、星期、小时、分钟、秒和毫秒。时间是协调世界时(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类型实现自定义转换似乎是一项艰巨的任务?

额外的转换是相当容易的- (fileTime % 10000)给你SYSTEMTIME没有(在100ns步骤)。所以你可以用它加上SYSTEMTIME。

虽然SYSTEMTIME主要用于UI;原来的FILETIME存储起来更小,并且在许多用途上更容易使用。