Chrono - 两个时间点之间的差异,以毫秒为单位?

waa*_*919 15 c++ time c++11 c++-chrono

我怎样才能(使用std :: chrono库)得到两个时间点之间的差异,以毫秒为单位?

我可以用这个来做到这一点:

std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();

std::chrono::time_point<std::chrono::system_clock> foo = now + std::chrono::milliseconds(100);

std::chrono::duration<float> difference = foo - now;

const int milliseconds = difference.count() * 1000;
Run Code Online (Sandbox Code Playgroud)

我怎样才能在毫秒内得到这个时间,所以我可以将持续时间用作unsigned int,而不是float,然后乘以1000?

lis*_*rus 27

std::chrono::duration有两个模板参数,第二个是测量单位.您可以调用std::chrono::duration_cast从一种持续时间类型转换为另一种持续时间类型 此外,还有一个预定义的持续时间类型,以毫秒为单位:std::chrono::milliseconds.一起撰写:

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(foo - now);
Run Code Online (Sandbox Code Playgroud)

要获得实际的毫秒数,请使用duration::count:

auto ms = milliseconds.count();
Run Code Online (Sandbox Code Playgroud)

它的返回类型是duration::rep标准持续时间类型std::chrono::milliseconds,如未指定大小的有符号整数.


zos*_*ska 5

chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count()
Run Code Online (Sandbox Code Playgroud)


Ace*_*unk 5

我在打印 e-09 等字母的持续时间时遇到了问题。这是我修复它的方法:

auto start = std::chrono::high_resolution_clock::now();
< run your function or code here >
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = finish - start;
std::cout << "Elapsed Time: " << elapsed.count() << " seconds" << std::endl;
Run Code Online (Sandbox Code Playgroud)

现在我得到了想要的结果:

Elapsed Time: 34.406 seconds
Run Code Online (Sandbox Code Playgroud)

  • 我发现该代码中有两件事很奇怪:首先,chrono 库使用有理数(整数分子和分母),因此在这里使用 double 似乎很奇怪。其次,我看不到从毫秒到秒的转换发生在哪里。 (7认同)