我试图了解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文章是一个很好的资源(尽管它可能更多是“论文”)。



我的问题是SYSTEMTIME structure


typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;

似乎只有毫秒精度,此结构的文档在结构的wMilliseconds部分进行了注释:



如果我想将高精度的FILETIME转换为某种SYSTEMTIME结构,该如何保持额外的精度?从FILETIME类型实现自定义转换似乎是一项艰巨的任务?

最佳答案

额外的转换非常容易-(fileTime % 10000)为您提供SYSTEMTIME所不具备的功能(以100ns为步长)。因此,您可以使用它加上SYSTEMTIME。

尽管SYSTEMTIME主要用于UI;原始的FILETIME较小,可以存储,并且可以轻松用于多种用途。

关于c++ - C++高分辨率SYSTEMTIME结构,大于ms?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32812334/

10-11 15:01