2017-02-28 48 views
0

我一直在寻找这个,但没有找到解决方案的确切问题。在C++ std中,如何在运行时选择计时器的持续时间

总之,有没有一种方法来计算定义std :: chronos变量的持续时间?就拿下面的一段代码:

auto timed = std::chrono::duration_cast<std::chrono::microseconds>(t1-t0).count(); 

我使用一个自定义Timer类测量代码执行某些功能的持续时间。我想要做的是创建一个switch,通过它一个凸轮定义结果是否应该存储为microseconds,millisecondsseconds

在C++中实现这一点的方法是什么?

+2

您可以随时保存最高分辨率结果,并将其转换当有人要求在较低的分辨率 –

回答

0

你可以做类似的事情(假设scstd::chrono)。正如你所看到的转换是一个模板参数(编译时间参数):

class Timer { 
    sc::time_point<sc::steady_clock> _start; 

    Timer() : _start(sc::steady_clock::now()) { 
    } 

    template <class Unit> 
    int getElapsed() { 
     return sc::duration_cast<Unit>(sc::steady_clock::now() - _start).count(); 
    } 
}; 

用法:

Timer t; 
... 
t.elapsed<sc::milliseconds>(); 

现在,如果你想要的单位在运行时一个简单的开关,只是包装你的模板函数到与此时,相应的投实例您Timer::getElapsed功能,和你做至少对于简单的情况下的函数:

enum class UnitCount { ms, s }; 

int Timer::getElapsedInUnits(UnitCount c) { 
    switch (c) { 
     case UnitCount::ms: 
     return this->getElapsed<sc::milliseconds>(); 
     case UnitCount::s 
     ... 
    } 
} 
+1

谢谢,优雅的解决方案 –