std::chrono计算不同比例的差异

std::chrono calculate the difference in different ratio

本文关键字:chrono 计算 std      更新时间:2023-10-16

我的标题可能没有太大帮助,我有一个std::chrono::纳秒,但我被要求串行化,并在JSON中提供第二个,然后是纳秒作为不同的值。

因此,尽管我的结构成立:

struct time
{
     ...
     std::chrono::nanoseconds timepoint;
};

当被要求几秒钟时,我做

uint32_t sec() const
{
     return std::chrono::duration_cast<std::chrono::seconds>(timepoint_).count();
}

然而,当被问及纳秒时,我想要以纳秒为单位的分辨率,但没有秒(只有最不重要的值?)然而,以纳秒为条件的投射会同时返回秒和更高的分辨率。

uint64_t nanosec() const
{
    return std::chrono::duration_cast<std::chrono::nanoseconds>(timepoint_).count();
}

如何计算实际增加的分辨率(例如,没有实际秒的纳秒)?

您可以使用std::duration_caststd::seconds检索秒,使用模运算符检索纳秒

template <typename T>
std::pair<T, T> split (std::chrono::duration<T, std::nano> const& duration) {
    using seconds = std::chrono::duration<T>;
    return {std::chrono::duration_cast<seconds>(duration).count(),
            (duration % seconds{1}).count()};
}

这个页面上有一个很好的例子,展示了在std::chrono::duration上使用算术运算符来实现您想要的目标。

user@Xarn提供了解决方案:

auto sec = std::chrono::duration_cast<std::chrono::seconds>(tp);
auto nsec = std::chrono::duration_cast<std::chrono::nanoseconds>(tp);
auto diff = std::chrono::duration_cast<std::chrono::nanoseconds>(nsec - sec).count();

使纳秒分辨率没有秒。