【问题标题】:Duration from std::time_t (in between steady_clock)从 std::time_t 开始的持续时间(在 stable_clock 之间)
【发布时间】:2015-05-19 02:06:17
【问题描述】:

我有一个从 stable_clock 时间点返回 std::time_t 的函数:

static const time_t steady_clock_to_time_t( steady_clock::time_point t )
{
    return system_clock::to_time_t(system_clock::now()
                                          + (t - steady_clock::now()));
}

在一个函数中,我现在用 std::time_t 表示的时间是这样说的:

steady_clock::time_point p1 = steady_clock::now();
const std::time_t t1 = steady_clock_to_time_t(p1);

在另一个函数中t1 被传入。我需要计算从t1t2 需要多长时间,但这些都不起作用:

void func(std::time_t t1)
{
    std::cout << t1 << '\n';
    steady_clock::time_point tp2 = steady_clock::now();
    steady_clock::time_point tp1 = system_clock::from_time_t (t1);

    // see how long it took 
    std::chrono::duration<double> timeTaken{std::chrono::duration_cast<std::chrono::duration<double>>(tp2-tp1)}; 

    auto d = std::chrono::duration_cast<std::chrono::microseconds>(tp2 - tp1).count();

    std::cout << "Took: " << d << " microseconds\n";

给定一个使用稳定时钟加时间戳的 std::time_t(使用上面的转换函数,但我对其他东西持开放态度),我如何稍后加时间戳,然后看看它之间花费了多长时间(以微秒为单位)两次?

编辑:

const std::time_t t1 = steady_clock::now().time_since_epoch().count();

这被传递给 func

void func(std::time_t t1)
{
    steady_clock::time_point tp2 = steady_clock::now();

如何获取 tp2 和 t1 之间的持续时间(以微秒为单位)?

【问题讨论】:

  • 您应该解释“这不起作用”的意思。无论如何,在实际意义上这是不可能的,因为time_t 测量的时间分辨率是一秒,所以你无法达到接近微秒的精度。
  • 有没有办法将 stable_clock::now() 的返回值转换为长整数?
  • now() 返回一个time_point;您可以使用time_point::time_since_epoch() 将其转换为自时钟开始以来的持续时间。正如您已经看到的,duration::count() 将返回您想要的刻度的数值。
  • 那么从 count 到 time_point 的相反方向是什么,所以我可以说 auto d = std::chrono::duration_cast<:chrono::microseconds>(tp2 - tp1 )。数数();其中 tp1 和 tp2 是 time_points?
  • 请参阅上面的编辑部分以了解详情

标签: c++11 chrono


【解决方案1】:

好的,我明白了:

long t1 = steady_clock::now().time_since_epoch().count();

func(t1);

typedef std::chrono::duration<long, std::ratio<1l,1000000000l>> micros_type;
func(long d1)
{
    auto time1 =  std::chrono::duration_cast<std::chrono::microseconds>(micros_type(d1));
    auto time2 =  std::chrono::steady_clock::now().time_since_epoch();

    auto d = std::chrono::duration_cast<std::chrono::microseconds>(time2 - time1).count();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2021-08-03
    • 2018-10-12
    相关资源
    最近更新 更多