- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
GetSystemTimePreciseAsFileTime:以尽可能高的精度 (<1us) 检索当前系统日期和时间。
这给了我们一个 FILETIME
然后我们将它传递给:文件时间到系统时间这给了我们一个 SYSTEMTIME
但是 SYSTEMTIME 只向我们显示毫秒精度。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
那么我如何获得 (<1us) 部分呢?我希望能够打印类似的东西
printf( "milli:[%u] micro:[%u] nano:[%u]\n",
st.wMilliseconds, st.wMicro, st.Nano );
谢谢
我试过以下方法:
int main()
{
FILETIME ft = { 0 };
SYSTEMTIME st = { 0 };
UINT32 nsT = 0;
UINT32 us = 0;
UINT32 ns = 0;
for (int i = 0; i < 32; i++)
{
GetSystemTimePreciseAsFileTime(&ft);
FileTimeToSystemTime(&ft, &st);
nsT = (ft.dwLowDateTime & 0x0FFFFFFFFLL) | (ft.dwHighDateTime << 32LL);
us = (nsT % 10000LL) / 10LL;
ns = (nsT % 10LL);
wprintf(L"DT:[%u%02u%02u %02u:%02u:%02u:%03u:%03u:%u]\n",
st.wYear, st.wMonth, st.wDay,
st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, us, ns);
}
}
但是它会产生乱序的时间
DT:[20190921 12:48:51:152:735:4]
DT:[20190921 12:48:51:164:561:4]
DT:[20190921 12:48:51:169:126:3]
DT:[20190921 12:48:51:172:595:0]
DT:[20190921 12:48:51:173:428:7]
DT:[20190921 12:48:51:173:415:9]
DT:[20190921 12:48:51:177:446:2]
DT:[20190921 12:48:51:181:309:8]
DT:[20190921 12:48:51:182:386:7]
DT:[20190921 12:48:51:184:650:6]
DT:[20190921 12:48:51:184:740:6]
DT:[20190921 12:48:51:189:271:8]
DT:[20190921 12:48:51:190:471:4]
DT:[20190921 12:48:51:194:746:6]
DT:[20190921 12:48:51:197:049:5]
DT:[20190921 12:48:51:198:793:4]
DT:[20190921 12:48:51:200:823:4]
DT:[20190921 12:48:51:200:529:1]
DT:[20190921 12:48:51:202:606:3]
DT:[20190921 12:48:51:210:913:4]
DT:[20190921 12:48:51:214:764:6]
DT:[20190921 12:48:51:214:815:4]
DT:[20190921 12:48:51:219:079:4]
DT:[20190921 12:48:51:222:580:2]
DT:[20190921 12:48:51:223:959:5]
DT:[20190921 12:48:51:224:933:8]
DT:[20190921 12:48:51:225:844:7]
DT:[20190921 12:48:51:226:810:7]
DT:[20190921 12:48:51:228:811:1]
DT:[20190921 12:48:51:230:139:1]
DT:[20190921 12:48:51:253:539:1]
DT:[20190921 12:48:51:253:653:9]
请注意以下对于给定的毫 (173),我们有递减的微单位(428 到 415)415 应该大于 428。
DT:[20190921 12:48:51:173:428:7]
DT:[20190921 12:48:51:173:415:9]
DT:[20190921 12:48:51:200:823:4]
DT:[20190921 12:48:51:200:529:1]
然后我将字符串冲刺到全局数组并在后续循环中打印它以确保没有标准输出竞争条件,但它仍然在更精细的范围内乱序:
DT:[20190921 13:05:01:228:534:1]
DT:[20190921 13:05:01:228:534:3]
DT:[20190921 13:05:01:228:534:3]
DT:[20190921 13:05:01:228:534:1]
DT:[20190921 13:05:01:228:534:3]
DT:[20190921 13:05:01:228:534:1]
DT:[20190921 13:05:01:228:534:3]
如果我添加一些代码来比较计算的毫秒与 ST.wMilliseconds,我们会发现不一致:
ms:[140][0x8C] != st.wMilliseconds:[177][0xB1]
ms:[284][0x11C] != st.wMilliseconds:[184][0xB8]
ms:[337][0x151] != st.wMilliseconds:[236][0xEC]
感谢 Adrian,以下代码似乎可以完美运行:
int main()
{
WCHAR b[MAX][256] = { 0 };
FILETIME ft = { 0 };
SYSTEMTIME st = { 0 };
UINT64 ftLo = 0;
UINT64 ftHi = 0;
UINT64 myTime = 0;
UINT64 ms = 0;
UINT64 us = 0;
UINT64 ns = 0;
for (int i = 0; i < MAX; i++)
{
GetSystemTimePreciseAsFileTime(&ft);
FileTimeToSystemTime(&ft, &st);
ftLo = ft.dwLowDateTime;
ftHi = ft.dwHighDateTime;
myTime = ftLo | (ftHi << 32uLL);
ms = (myTime % 10000000uLL) / 10000uLL;
us = (myTime % 10000uLL) / 10uLL;
ns = (myTime % 10uLL);
if (ms != st.wMilliseconds)
wprintf(L"ms:[%llu][0x%llX] != st.wMilliseconds:[%u][0x%X]\n",
ms, ms, st.wMilliseconds, st.wMilliseconds);
wprintf(L"%u%02u%02u %02u:%02u:%02u:%03llu:%03llu:%llu\n",
st.wYear, st.wMonth, st.wDay,
st.wHour, st.wMinute, st.wSecond,
ms, us, ns);
}
return 0;
}
结果:
20190922 10:51:20:625:917:4
20190922 10:51:20:626:065:5
20190922 10:51:20:628:774:2
20190922 10:51:20:631:084:5
20190922 10:51:20:631:628:4
20190922 10:51:20:632:223:0
20190922 10:51:20:635:252:7
20190922 10:51:20:637:841:8
20190922 10:51:20:641:058:9
20190922 10:51:20:649:869:0
20190922 10:51:20:651:283:0
20190922 10:51:20:652:677:9
20190922 10:51:20:652:749:7
20190922 10:51:20:652:808:6
20190922 10:51:20:654:621:0
20190922 10:51:20:656:662:3
20190922 10:51:20:659:048:9
20190922 10:51:20:660:926:0
20190922 10:51:20:664:202:1
20190922 10:51:20:666:506:9
20190922 10:51:20:666:592:6
20190922 10:51:20:666:712:8
20190922 10:51:20:670:800:7
20190922 10:51:20:680:442:7
20190922 10:51:20:680:522:0
20190922 10:51:20:681:207:1
20190922 10:51:20:682:988:3
20190922 10:51:20:684:476:8
20190922 10:51:20:685:727:1
20190922 10:51:20:685:777:0
20190922 10:51:20:686:526:3
20190922 10:51:20:686:919:9
最佳答案
正如您所注意到的,您不能通过使用 SYSTEMTIME
结构来执行此操作。您需要从返回的 FILETIME
结构中提取数据并将其作为 64 位整数处理:
FILETIME fTime;
GetSystemTimePreciseAsFileTime(&fTime);
uint64_t ftLo = uint64_t(fTime.dwLowDateTime);
uint64_t ftHi = uint64_t(fTime.dwHighDateTime);
uint64_t myTime = ftLo | (ftHi << 32uLL);
myTime
变量将保存自 1601 年 1 月 1 日以来 100 纳秒间隔的数量。
要从这个“epoch”值获取 SYSTEMTIME
中“缺失”的 us 和 ns 字段,您可以简单地使用下面的代码。您还应该获得自己的毫秒值,以防转换为 SYSTEMTIME
时“舍入”了 dwMilliseconds
值(不知道是否会发生这种情况):
uint64_t millis = (myTime % 10000000uLL) / 10000uLL;
uint64_t micros = (myTime % 10000uLL) / 10uLL;
uint64_t nanos = (myTime % 10uLL) * 100uLL; // Will have a resolution of only 100ns
(假设自 1601 年 1 月 1 日以来的所有天数都是整数毫秒,我认为这是一个合理的假设!)
注意:另一种选择是将 FILETIME
结构复制(或强制转换)为 ULARGE_INTEGER
,然后分配该 union 的 QuadPart
元素到 我的时间
。这将也有效,但是,在标准 C++ 中,写入 union 的一部分然后从另一部分读取在形式上是未定义的行为。
关于c - Windows API : Get micro seconds between milli seconds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039807/
我需要根据模板化参数返回正确的类型。我收到如下错误:有人可以建议解决这个问题的方法是什么吗?提前致谢。 error: no matching function for call to âsecond:
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How to convert milliseconds to “hh:mm:ss” format? 我敢打赌很多人都
在脚本中,我使用 AJAX 从脚本请求数据。返回的数据以JSON格式返回。该脚本返回秒数,我正在寻找一种简单的方法来生成倒计时,显示返回值生成的分钟和秒数。 例如,如果脚本返回 90,我需要每秒显示一
为什么以下不抛出错误并返回 59 秒? # 2016-02-02T16:05:59+00:00 DateTime.strptime('02-02-2016 04:05:60 PM', '%d-%m-%
我想重新排列一个数据框,以便 1) 第一列始终保持在最前面,并且 2) 其余列的后半部分被拆分为每秒出现。 注意下面的例子 请查看示例数据: # Example data N # 1 A
我正在使用一个函数 HideFrame 来隐藏/显示两个 iframe 的左侧。该函数由使用按钮 image1 和 image2 的 onclick() 事件调用。 不幸的是,当我单击 image1
这个问题在这里已经有了答案: What is a non-capturing group in regular expressions? (18 个答案) 关闭 3 年前。 我正在尝试理解和练习以下
我可以请求一些关于子查询的帮助吗? 当我在本地 XAMP mySQL 数据库上运行查询时,查询需要 2 秒才能完成。然而,在我的网络服务器上使用相同的数据库,相同的查询需要 98 秒以上才能返回相同的
此处 unsigned long EVTime::seconds() 方法与 ptime p(d,seconds(s)); 冲突。如果我将 ptime seconds(s) 更改为分钟/小时,那么它工
GetSystemTimePreciseAsFileTime:以尽可能高的精度 (<1us) 检索当前系统日期和时间。 这给了我们一个 FILETIME 然后我们将它传递给:文件时间到系统时间这给了我
我现在面临的问题: 我有一个应用程序,它包含第一个 Activity MainActivity 和第二个名为 SecondActivity 的 Activity。现在,在这两个中我都需要一个单独的表:
我不明白为什么这个方法不起作用。使用 isEqualToDate: 时是否查看秒数和分秒数? //Test that the NSDate category's DatePlusDays: metho
在 http://www.cplusplus.com/reference/map/map/insert/ ,我对做 ret.first->second 的推理感到困惑或 it->second访问第二个
使用 Bash 脚本将 00:20:40.28 (HH:MM:SS) 转换为秒的简单方法是什么? 分秒可以剪掉,不是必须的。 最佳答案 试试 awk。作为奖励,您可以保留分秒。 echo "00:20
我正在尝试计算设定的日期时间对象和当前时间之间耗时。我希望它能够以这种格式出现 DD:HH:MM:SS 其中 DD 是天,HH 是小时,MM 是分钟,SS 是秒。我能够得到总天数、总小时数、总分钟数和
我仍然很新...所以, 我的问题的症结可以概括为:我正在准备将数据发送到远程API,这要求此字段为time.Duration类型,而我试图将其作为秒类型的字符串类型###s发送,并且time.Pars
我附和这个: php> echo date("Y-m-d\TH:i:s"); 2011-05-27T11:21:23 如何使用日期函数来获取这种日期格式: 2011-01-12T14:
我很好奇两者之间有什么区别。 irb(main):001:0> require 'active_support/core_ext' => true irb(main):002:0> 1.second.
浏览一些代码,我发现了两种每秒做某事的方法: for { fmt.Println("This is printed every second") time.Sleep(time.Sec
我正在使用 Sidekiq 在 AWS 服务器上创建 PDF 文档以在后台处理此作业。 在创建 PDF 文件的过程中,[Rails] 应用程序正在汇集数据库以检查是否创建了 PDF 文件(间隔:2 秒
我是一名优秀的程序员,十分优秀!