C++ 프로그래밍
std::chrono::steady_clock 관련 종합 예제
하늘흐늘
2021. 11. 22. 21:42
반응형
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
반응형