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

 

반응형