2017-11-30 17 views
2

I가 나는 다음과 같은 방법으로 호출 할 수 있어요 std::chrono::milliseconds형 표준 : 크로노 :: 밀리 초 PARAM으로 설정할 수있는 변수를 선언하는 방법

void SomeMethod(std::chrono::milliseconds some_value) { 

    // some logic 
} 

을 섭취 다음과 같은 방법 :

using namespace std::chrono_literals; 
SomeMethod(1000ms); 

작동.
그러나, 멤버 변수 또는 일부 전역 적으로 선언 된 변수를 전달하여 다음과 같이 호출하고 싶습니다. 이런 식으로 뭔가,

using namespace std::chrono_literals; 
std::chrono::system_clock::duration timeout = 3000ms; 

하지만 다음과 같은 오류가 발생합니다 :

error: no viable conversion from 'duration<[...], ratio<[...], 1000000>>' to 'duration<[...], ratio<[...], 1000>>' 
SomeMethod(some_value); 
                      ^~~~~~~ 
+0

해서는 안 당신의 초기화가 될 : 표준 : 크로노 :: 밀리 초 시간 제한 = 3000ms; – sajas

답변

7

오류 메시지가 밀리 초에 마이크로 변환 위해 노력하고 있음을 말하고있다. system_clock::duration은 플랫폼에 따라 std::chrono::microseconds의 typedef 여야합니다.

당신은 당신이 duration_cast 필요 암시 적 std::chrono::system_clock::duration timeout = 3000ms; 라인으로 microsecondsmilliseconds 변환 할 수 있지만, 다른 방법으로 변환 :

std::chrono::duration_cast<std::chrono::milliseconds>(timeout); 
+0

이 캐스트가 손실 될 수 있습니다. 시스템 시계 시간 단위가 분 (!) 인 경우 3000ms는 0 분으로 매핑됩니다. 원하는 시간이 아닐 수도 있습니다. 그렇다면 다시, 당신의 플랫폼은 매분마다 틱하는 시계처럼, 어쩌면 당신은 더 큰 문제가있을 수 있습니다. – Yakk