요즘 바쁘다 보니 아주 오랜만에 글을 올리게 되었습니다^^;
이번 시간에는 chrono를 사용하여 시간 계산에 대해서 간단하게 설명 하겠습니다.
이전 시간에서 보았듯이 chrono는 아래와 같이 다양한 타입으로 시간을 표시할 수 있습니다.
boost::chrono::nanoseconds // 나노 세컨드. 10억분의 1초
boost::chrono::microseconds // 마이크로 세컨드. 100만분의 1초
boost::chrono::milliseconds // 밀리 세컨드. 1000분의 1초
boost::chrono::seconds // 초
boost::chrono::minutes // 분
boost::chrono::hours // 시
각 시간 타입 별로 생성할 때 값을 설정할 수 있습니다.
boost::chrono::hours H1(1); // 1시간
boost::chrono::hours H2(2); // 2시간
boost::chrono::hours H25(25); // ?
boost::chrono::seconds S1(10);
boost::chrono::seconds S2(120);
boost::chrono::milliseconds MILS1(100);
위 코드의 H1이나 S1, MILS1은 문자열이나 숫자로 출력할 수 있습니다.(방법은 제일 아래의 예제 코드를 봐 주세요)
또한 이 시간 타입을 서로 연산할 수도 있습니다.
boost::chrono::hours H1(1);
boost::chrono::hours H2(2);
boost::chrono::hours H3 = H1 + H2;
물론 다른 시간 타입을 연산할 수도 있습니다
boost::chrono::seconds S1(10);
boost::chrono::milliseconds MILS1(100);
boost::chrono::milliseconds MILS2 = S1 + MILS1;
다른 시간 타입을 연산할 때 주의할 점이 있습니다. 아래처럼
의 경우는 초와 밀리세컨드라는 서로 다른 타입을 더하지만 값을 저장하는 타입이 밀세컨드이기 때문에 읽어버리는 값이 발생하지 않으므로 연산에 문제가 없습니다.
그러나 아래와 같이
로 하는 경우는 밀리세컨드 부분을 잃어버리게 되기 때문에 컴파일 에러를 발생합니다.
이런 경우는 명시적으로 형 변환을 시켜줘야 합니다.
< 예제 >
int main()
{
{
boost::chrono::hours H1(1); // 1시간
boost::chrono::hours H2(2); // 2시간
boost::chrono::hours H3(25); // ?
std::cout << "H1(1) - 문자열 : " << H1 << std::endl;
std::cout << "H1(1) - 숫자로 : " << H1.count() << std::endl;
std::cout << "H3(25) - 문자열 : " << H3 << std::endl;
std::cout << "H3(25) - 숫자로 : " << H3.count() << std::endl;
boost::chrono::seconds S1(10);
boost::chrono::seconds S2(120);
std::cout << "S1(10) - 문자열 : " << S1 << std::endl;
std::cout << "S1(10) - 숫자로 : " << S1.count() << std::endl;
std::cout << "S2(120) - 문자열 : " << S2 << std::endl;
std::cout << "S2(120) - 숫자로 : " << S2.count() << std::endl;
}
{
boost::chrono::hours H1(1);
boost::chrono::hours H2(2);
boost::chrono::hours H3 = H1 + H2;
std::cout << "H1 + H2 = : " << H3 << std::endl;
boost::chrono::seconds S1(10);
boost::chrono::milliseconds MILS1(100);
boost::chrono::milliseconds MILS2 = S1 + MILS1;
std::cout << "S1 + MILS1 = : " << MILS2 << std::endl;
boost::chrono::seconds S2 = boost::chrono::duration_cast< boost::chrono::seconds >(S1 + MILS1);
std::cout << "S1 + MILS1 = : " << S2 << std::endl;
}
return 0;
}
'C++0x' 카테고리의 다른 글
| [미리 보는 C++11] 7. chrono - 3 (2) | 2012/01/19 |
|---|---|
| [미리 보는 C++11] 7. chrono - 2 (1) | 2011/12/07 |
| [미리 보는 C++11] 7. chrono - 1 (2) | 2011/11/16 |
| [미리 보는 C++11] 6. Boost 라이브러리 설치 (1) | 2011/10/12 |
| [미리 보는 C++11] 5. enum (2) | 2011/10/06 |
| [미리 보는 C++11] 4. constexpr - 2 (1) | 2011/09/23 |
Native Cpp 개발자를 위한 Cpp-CLI.pdf



댓글을 달아 주세요
You are completely right in such kind of technical points!
I was searching for such a guide! It is very much clear to me