来自std :: time_t的持续时间(在steady_clock之间)

时间:2015-03-16 19:46:29

标签: c++11 chrono

我有一个函数从steady_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所需的时间,但这些都不起作用:< / p>

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之间以微秒为单位获得持续时间?

1 个答案:

答案 0 :(得分:0)

好的,我明白了:

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();