让我们使用using duration = std::chrono::steady_clock::duration
。我想要优雅地将duration转换为秒的double类型,并实现最大精度。
我已经找到了反向方法,但它没有帮助我找到答案。
或者更明确地说,我想要一个std函数double F(duration)
,它可以最佳地返回秒数。
让我们使用using duration = std::chrono::steady_clock::duration
。我想要优雅地将duration转换为秒的double类型,并实现最大精度。
我已经找到了反向方法,但它没有帮助我找到答案。
或者更明确地说,我想要一个std函数double F(duration)
,它可以最佳地返回秒数。
只需执行:
std::chrono::duration<double>(d).count()
或者,作为一个函数:
template <class Rep, class Period>
constexpr auto F(const std::chrono::duration<Rep,Period>& d)
{
return std::chrono::duration<double>(d).count();
}
如果您需要更复杂的转换,而使用 std::chrono::duration
构造函数不能满足需求,可以使用 std::chrono::duration_cast
。
将 std::chrono::duration
转换成任何数字“计数”都是看似简单的!
您可以除以任意两个std::chrono::duration
来高效地获得一个计数。
给定周期为任何时间段的持续时间d
和任何整数表示:
using std::chrono_literals;
// Want to know how many seconds? Divide by one second!
std::int64_t int_seconds = d / 1s;
double fp_seconds = d / 1.0s;
auto start = std::chrono::steady_clock::now();
/*code*/
auto end = std::chrono::steady_clock::now();
std::chrono::duration<double> diff = end - start;
std::cout << "Duration [seconds]: " << diff.count() << std::endl;
但我不知道精度...虽然这种方法非常精确。
std::chrono::steady_clock
中默认的period
是秒,这就是为什么count()
返回秒的原因。“对象的表示值作为时间段计数。” - Trake Vital
std::chrono::seconds
的情况下以秒为单位获取它? - nj2237std::chrono::duration
的默认std::ratio
是1
,表示秒。你可以使用std::chrono::duration<double,std::ratio<1,1000>>
来获取毫秒级别的持续时间,使用duration<double,ratio<1000,1>>
来获取千秒级别的持续时间,以此类推。 - bames53