【发布时间】:2021-10-20 03:52:57
【问题描述】:
我搜索了 SO 并找到了相关问题的答案,但我对三种不同的时钟定义感到困惑。考虑到我在 Windows 上使用 Mingw 进行编译;
- 不知道下面的代码是否可以? (我真的不需要纳秒或微秒的精度;只是测试......)
- 我应该使用哪一个?
std::chrono::high_resolution_clockstd::chrono::system_clockstd::chrono::steady_clock
#include <iostream>
#include <chrono>
...
...
...
void printTimeElapsed(
std::chrono::high_resolution_clock::time_point t0,
std::chrono::high_resolution_clock::time_point t1)
{
int64_t hh; // hour
int64_t mm; // min
int64_t ss; // sec
int64_t ml; // millisec
int64_t mc; // microsec
int64_t ns; // nanosec
ns = std::chrono::duration_cast<std::chrono::nanoseconds>(t1 - t0).count();
std::cout << ns << std::endl;
mc = ns / 1000;
ns %= 1000;
ml = mc / 1000;
mc %= 1000;
ss = ml / 1000;
ml %= 1000;
mm = ss / 60;
ss %= 60;
hh = mm / 60;
mm %= 60;
std::cout
<< std::setfill('0') << std::setw(3) << hh << ":"
<< std::setfill('0') << std::setw(2) << mm << ":"
<< std::setfill('0') << std::setw(2) << ss << "."
<< std::setfill('0') << std::setw(3) << ml << "."
<< std::setfill('0') << std::setw(3) << mc << "."
<< std::setfill('0') << std::setw(3) << ns << std::endl;
return;
}
...
...
...
int main(
int argc,
char *argv[])
{
std::chrono::high_resolution_clock::time_point t0;
std::chrono::high_resolution_clock::time_point t1;
...
...
t0 = std::chrono::high_resolution_clock::now();
/* call the function to be measured */
t1 = std::chrono::high_resolution_clock::now();
printTimeElapsed(t0, t1);
...
...
return (0);
}
【问题讨论】:
-
std::chrono::steady_clock
-
绝对是
steady_clock。system_clock可以倒退,high_res_clock不可靠,因为它可以是任何东西,例如sysyem_clock的别名。 -
和你一样,我使用了
std::chrono::high_resolution_clock,但在 SO 之间并不一致,因此建议使用std::chrono::steady_clock或std::chrono::system_clock。查看en.cppreference.com/w/cpp/chrono/high_resolution_clock中的注释 -
std::chrono::steady_clock