如何获取两个时间点之间的毫秒差

问题描述 投票:0回答:4

如何获取(使用

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;

如何获得以毫秒为单位的时间,以便我可以将持续时间用作

unsigned int
,而不是
float
,然后乘以 1000?

c++ c++11 time c++-chrono
4个回答
67
投票

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

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(foo - now);

要获取实际的毫秒数,请使用

duration::count
:

auto ms = milliseconds.count();

它的返回类型是

duration::rep
,对于像
std::chrono::milliseconds
这样的标准持续时间类型来说,它是一个未指定大小的有符号整数。


13
投票
chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count()

6
投票

我在使用 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;

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

Elapsed Time: 34.406 seconds

2
投票

http://www.cplusplus.com/reference/chrono/duration_cast/

std::chrono::duration_cast<std::chrono::milliseconds>();
© www.soinside.com 2019 - 2024. All rights reserved.