C++11 标准时间的持续时间:时间(在稳定时钟之间)

C++11 标准时间的持续时间:时间(在稳定时钟之间),c++11,chrono,C++11,Chrono,我有一个函数,它从一个稳定的时钟时间点返回一个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

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
。我需要计算从
t1
t2
需要多长时间,但这一切都不起作用:

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";
这将传递给func

void func(std::time_t t1)
{
    steady_clock::time_point tp2 = steady_clock::now();
如何获得tp2和t1之间的持续时间(以微秒为单位)?好的,我得到了:

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();
long t1=稳定的时钟::now().time_-since_-epoch().count();
func(t1);
typedef std::chrono::duration micros_type;
func(长d1)
{
自动时间1=std::chrono::duration_cast(微秒类型(d1));
自动时间2=std::chrono::稳定的时钟::现在();
自动d=std::chrono::duration_cast(time2-time1).count();

你应该解释你所说的“这不起作用”是什么意思。无论如何,在实际意义上,这是不可能的,因为
time\u t
测量的时间分辨率是1秒,因此你无法获得接近微秒的精度。有没有办法将staid\u clock::now()的返回值转换为长整数?
now()
返回一个
时间点
;您可以使用
时间点::time\u自_epoch()将其转换为自时钟开始的持续时间。如您所见,
持续时间::计数()
将返回所需的刻度的数值。那么,从计数到时间点的相反方向是什么,我可以说auto d=std::chrono::duration_cast(tp2-tp1).count();其中tp1和tp2是时间点?请参阅上面的编辑部分以了解详细信息
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();