如何在 C++ ATL/MFC 中检索具有相同格式的刻度,如 DateTime.Ticks

Posted

技术标签:

【中文标题】如何在 C++ ATL/MFC 中检索具有相同格式的刻度,如 DateTime.Ticks【英文标题】:How retrieve ticks with same format like DateTime.Ticks in C++ ATL/MFC 【发布时间】:2012-05-10 23:05:27 【问题描述】:

是否可以获得与DateTime.Ticks .NET 对象相同格式的刻度数,以 100ns 为单位,在 C++ ATL 或 MFC 中?

【问题讨论】:

将 0x701ce1722770000L 添加到 FILETIME 以将偏差从 1600 年更改为 0 年。 【参考方案1】:

DateTime.Ticks 对定时器分辨率没有任何影响,因此不能保证定时器精度为 100ns。在 C++ 中,您可以使用类似的值:

ULONGLONG nTicks = GetTickCount() * 10000i64;

如果您需要更准确的计时器,请查找基于 QueryPerformanceCounter 的实现。见:

How to use QueryPerformanceCounter? Fastest timing resolution system Can someone decipher whether timeGetTime() or QueryPerformanceCounter/QueryPerformanceFrequency has lower overhead or/and accuracy?

UPD。至于与 .NET Ticks 属性的对齐方式,请参阅上面 Hans 的评论 - 从 GetFileTime API 的结果中转换/计算的值也采用相同的 100 ns 单位,并由固定常数抵消 Ticks 属性.

【讨论】:

根据 MSDN GetTickCount() 返回系统启动后的滴答计数。自 '01/01/0001 00:00:00' 以来有能力得到滴答声,就像在 .NET 中一样? GetSystemTimeAsFileTime msdn.microsoft.com/en-us/library/windows/desktop/… 让您在FILETIME 结构中获得时间,然后将其值添加到单个 64 位整数中,添加硬编码常量(见上文),这就是您所需要的。

以上是关于如何在 C++ ATL/MFC 中检索具有相同格式的刻度,如 DateTime.Ticks的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ATL/MFC CString 转换为 QString?

当所有检索值在laravel中具有相同的会话键时,如何检查会话数组是不是具有唯一的ID

如何使用 Python 检索具有制表符格式的文件中的值?

C++ COM 设计。组合与多重继承

.NET Core 如何以编程方式检索具有相同所有者的所有 nuget 包元数据?

如何从两个表中选择同一字段中具有相同值的行?