- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
chrono 标题中的注释只是说
// wraps GetSystemTimePreciseAsFileTime/GetSystemTimeAsFileTime
但它实际使用的是什么(即我期望的精度是多少)?该实现调用 _Xtime_get_ticks
,但该函数是不透明的。
最佳答案
CRT 在可用时调用 GetSystemTimePreciseAsFileTime
,否则调用 GetSystemTimeAsFileTime
。GetSystemTimePreciseAsFileTime
为您提供 highest possible level of precision (<1us) .
有时在运行时初始化期间,一个名为 initialize_pointers
的函数被调用,它基本上执行以下操作(反编译和简化):
HMODULE hModule = GetModuleHandleW(L"kernel32.dll");
__encodedKERNEL32Functions[0] = (void *)GetProcAddress(hModule, "FlsAlloc");
__encodedKERNEL32Functions[1] = (void *)GetProcAddress(hModule, "FlsFree");
__encodedKERNEL32Functions[2] = (void *)GetProcAddress(hModule, "FlsGetValue");
__encodedKERNEL32Functions[3] = (void *)GetProcAddress(hModule, "FlsSetValue");
...
__encodedKERNEL32Functions[24] = (void *)GetProcAddress(hModule, "GetSystemTimePreciseAsFileTime");
...
在装有 Windows 8 或更新版本的系统上,__encodedKERNEL32Functions[24]
将为非零值。
然后归结为:
std::chrono::system_clock::now()
-> _Xtime_get_ticks
-> __crtGetSystemTimePreciseAsFileTime(FILETIME *)
void __crtGetSystemTimePreciseAsFileTime(FILETIME *lpSystemTimeAsFileTime)
{
void (*f)(FILETIME *) = (void (*)(FILETIME *))__encodedKERNEL32Functions[24];
if (f) // if GetSystemTimePreciseAsFileTime exists
f(lpSystemTimeAsFileTime); // call it
else
GetSystemTimeAsFileTime(lpSystemTimeAsFileTime);
}
至少这是(大约)在 14.16.27024.1 版本的 msvcp140.dll 和 msvcp140d.dll 中的实现方式。
当然,所有这些都没有记录在案并且可能会发生变化。
如果您需要使用GetSystemTimePreciseAsFileTime
,您应该write your own clock而不是依赖实现细节。
关于c++ - std::chrono::system_time 的 Visual Studio 2017 CRT 实现使用什么时钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54933940/
在 Google BigQuery 中,可以检索过去(至少过去 7 天)的表(快照)行: 对于 Legacy SQL,我们可以使用 snapshot decorators : #legacySQL S
这里有人成功地在 Windows 上安装了 system_timer gem 吗?我的机器上有 devkit,我可以安装其他本地 gem。安装 gem 时出现以下错误。 In file include
这不像我在网上找到的例子那么困难。我正在尝试创建一个 std::chrono::system_time基于某些 UTC 日期。我在单线程中工作的代码如下: #include #include us
我将一个旧脚本迁移到一个新的 CentOS box 并在运行脚本时收到以下消息: Faraday: you may want to install system_timer for reliable
我目前正在学习 sql server 2016 中引入的新“系统版本化时态表”。但是,我很难理解“GENERATED ALWAYS AS ROW START”的确切含义和用法/END”和“PERIOD
chrono 标题中的注释只是说 // wraps GetSystemTimePreciseAsFileTime/GetSystemTimeAsFileTime 但它实际使用的是什么(即我期望的精度是
我是一名优秀的程序员,十分优秀!