2017-03-14 1 views
0

두 개의 타임 스탬프 (내 자신의 클래스, 신기원 이후 나노초를 반환)를 비교할 수 있도록 일반 함수를 작성하고 싶습니다. std :: chrono :: duration 값 (초, 밀리 초 등)을 전달합니다. :C++ 11 두 함수의 차이를 비교하는 일반 함수?

template<typename PERIOD> 
bool IsTimestampWithin(const MyTime t1, const MyTime t2, const rsInt64 units){ 
    return t2.Nanos() - t1.Nanos() < units; 
} 

는 그러나, 나는 나노초 내 타임 스탬프 반환의 수에서 std::chrono 객체를 생성하는 방법을 불확실입니다. 내가 찾은 모든 예는 시스템 또는 고정밀 클록 캐스트를 사용하는 것입니다.

답변

1

duration_cast 임의의 지속 시간을 std::chrono::nanoseconds으로 설정 한 다음 use .count()으로 설정하여 나노초 값을 추출 할 수 있습니다.

using std::chrono::duration; 
using std::chrono::duration_cast; 
using std::chrono::nanoseconds; 

template<typename R, typename P> 
bool IsTimestampWithin(const MyTime t1, const MyTime t2, const duration<R, P>& units){ 
    return t2.Nanos() - t1.Nanos() < duration_cast<nanoseconds>(units).count(); 
} 

// usage: 

if (isTimestampWithin(previous, now, std::chrono::milliseconds(300))) { 
    ... 
} 

경우 MyTime (동일한 클럭 소스에서)를 std::chrono::time_point 구조, 당신도 duration_cast 걱정 할 필요가 없습니다로 변환 할 수 있습니다, 당신은 간단하게 작성할 수

return t2.to_time_point() - t1.to_time_point() < units;