2017-02-28 11 views
0

나는 이것을 찾고 있었지만 정확한 문제에 대한 해결책을 찾지 못했습니다.C++ std에서 런타임 동안 크로노스의 지속 시간을 선택하는 방법

요약하면 std :: chronos 변수의 지속 시간을 계산 방식으로 정의하는 방법이 있습니까? 예를 들어 다음 코드 조각을 가지고 :

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

내가 사용하는 일부 기능에 대한 코드 실행의 지속 시간을 측정하는 사용자 정의 Timer 클래스입니다. 내가 뭘 하려는지 switch을 생성하여 하나의 캠이 결과가 microseconds, milliseconds 또는 seconds으로 저장되어야하는지 여부를 정의합니다.

C++에서이를 달성하는 방법은 무엇입니까?

+2

당신은 항상 최고 해상도의 결과를 저장하고 변환 할 수 있습니다 다음 appropiate 캐스트로 Timer::getElapsed 기능을 인스턴스화하고 최소한 간단한 경우에 대해 수행되는 함수에 템플릿 기능 누군가가 낮은 해상도에서 그것을 요구할 때 –

답변

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

, 단지 포장 당신이 캐스트를 볼 수있는 것은 템플릿 매개 변수 (컴파일시 매개 변수)입니다

enum class UnitCount { ms, s }; 

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

감사합니다, 좋은 우아한 해결책 –