반응형
std::chrono::steady_clock을 사용할 일이 있어서 이리 저리 조사를 하며 만들어본 예제입니다. 예제에는 지나간 시간 체크, 시간 차 duration에 시간 더하기, 현재 구한 시간에 시간 더하기, duration과 long long간의 형변환, 시간차를 나타내는 duration 시간 이쁘게 보여주기 등등이 포함되어 있습니다.
예제 소스는 아래와 같습니다.
#include <iostream>
#include <string>
#include <chrono>
#include <thread>
using namespace std;
int main(int argc, char* argv[])
{
// 예제 #1: 지나간 시간을 체크합니다.
auto now1 = std::chrono::steady_clock::now();
this_thread::sleep_for(std::chrono::milliseconds(1000));
auto now2 = std::chrono::steady_clock::now();
std::chrono::duration dur = now2 - now1;
cout << duration_cast<std::chrono::milliseconds>(dur) << endl;
// 예제 #2: now1과 now2 시간 차에 1000ms를 더합니다.
std::chrono::duration dur2 = now2 - now1;
dur2 += std::chrono::milliseconds(1000);
cout << duration_cast<std::chrono::milliseconds>(dur2) << endl;
// 예제 #3: 현재 시간에 1000ms을 더합니다.
auto now3 = std::chrono::steady_clock::now();
auto now4 = now3 + std::chrono::milliseconds(1000);
auto dur3 = now4 - now3;
cout << duration_cast<std::chrono::milliseconds>(dur3) << endl;
// 예제 #4: steady_clock::duration과 long long 간의 형변환을 테스트합니다.
long long now3_ll = now3.time_since_epoch().count();
long long now4_ll = now4.time_since_epoch().count();
std::chrono::steady_clock::duration now3_dur(now3_ll);
std::chrono::steady_clock::duration now4_dur(now4_ll);
auto dur4 = now4_dur - now3_dur;
cout << duration_cast<std::chrono::milliseconds>(now3_dur) << endl;
cout << duration_cast<std::chrono::milliseconds>(now4_dur) << endl;
// 예제 #5: 현재 시간에 일정 시간을 더 한 후 빼서 차이를 구하고
// 해당 시간 차에 대해서 문자열로 이쁘게 표시합니다.
auto now5 = std::chrono::steady_clock::now();
auto now6 = now5 + std::chrono::hours(1)
+ std::chrono::minutes(2)
+ std::chrono::seconds(3)
+ std::chrono::milliseconds(4);
auto dur5 = now6 - now5;
int hhh = duration_cast<std::chrono::hours>(dur5).count();
int mm = duration_cast<std::chrono::minutes>(dur5).count() % 60;
int ss = duration_cast<std::chrono::seconds>(dur5).count() % 60;
int ms = duration_cast<std::chrono::milliseconds>(dur5).count() % 1000;
cout << hhh << " hours "
<< mm << " minutes "
<< ss << " seconds "
<< ms << " milliseconds "
<< endl;
return 0;
}
저의 결과는 아래와 같습니다. now를 사용하는 관계로 예제를 실행하면 결과는 실행하는 사람마다 틀릴 것입니다.
1012ms
2012ms
1000ms
44547292ms
44548292ms
1 hours 2 minutes 3 seconds 4 milliseconds
반응형
'C++ 프로그래밍' 카테고리의 다른 글
C++ 클래스 함수 간접 호출 : mem_fn, bind, bind_front (0) | 2021.12.11 |
---|---|
C++ 전역 객체 혹은 정적 객체 간의 생성 및 소멸 순서 문제 (0) | 2021.12.09 |
C++ using namespace를 헤더 파일에 사용하지 말자 (0) | 2021.12.01 |
C++ 람다에서 참조 값과 복사 값 동시에 사용하기 (0) | 2021.11.29 |
동적 라이브러리(DLL)를 사용할 것인가? 아니면 정적 라이브러리(LIB)를 사용할 것인가? (1) | 2021.11.18 |
C++ chrono system_clock과 steady_clock의 이해 및 차이점 (0) | 2021.11.10 |
C/C++ __FUNCTION__, __FILE__의 유니코드 버전 (0) | 2021.11.01 |
C++ invoke_result: return type 알아내기 (0) | 2021.10.31 |