티스토리 뷰

 

저번 포스팅에 이어서 이번에는 c++에서 현재 시간과 날짜를 출력하는 방법을 알아보도록 하겠습니다.

 

 

 

c++에서 현재 날짜와 시간을 출력하기위해서는 time()와 localtime()를 사용해야 합니다.

 

 

[현재 시간 구하기]

#include <iostream>
#include <ctime>


using namespace std;

int main()
{
	time_t timer;
	struct tm *curr_timer;
	timer = time(NULL);  // 1970.01.01 00:00:00 이후부터 현재까지 흐른 시간 (s)

	curr_timer = localtime(&timer); //time_t 값은 32bit or 64bit
   					 //localtime()을 이용해서 보기 쉬운 형태로 변환
    
	cout << curr_timer->tm_year+1900 << "년 " << curr_timer->tm_mon+1 << "월 " << curr_timer->tm_mday << "일" << "\n";
	//tm_year : 1900년 부터의 년
	//tm_mon : 0 부터 11 까지의 값
    
	cout << curr_timer->tm_hour << "시 " << curr_timer->tm_min << "분 " << curr_timer->tm_sec << "초" << "\n";

}

 

tm_year은 1900년을 시작으로 하기 때문에 '+1900'을 해주어야 현재 날짜가 나오게 되고, tm_mon은 0부터 11까지 값을 출력하기 때문에 '+1'을 해주어야 1월부터 12월 까지 출력이 가능하다는 점을 주의해야합니다.

 

 

 

 

 

 

참고자료 : https://coding-factory.tistory.com/668

참고자료 : https://dosnipe.tistory.com/39

 

 

 

 

 


 

이제 (1)편과 (2)편에서 알아본 시간 측정 방법들을 이용하여 공부하던 코드에 적용해보도록 하겠습니다.

 

 

 

 

아래는 영상 필터링 처리를 하는 코드를 실행시키는 코드의 일부분입니다.

해당 함수가 평균적으로 어느정도의 속도로 실행되는지를 측정하기위해서 위 방법들을 이용해보았습니다.

 

void Tracker::CalcSBIRotation()
{

	time_t curr_time = time(NULL); //time(NULL) 함수 호출하여 현재 시간 가져오기 (1970년 이후 흐른 시간)
	struct tm* curr_tm;
	curr_tm = localtime(&curr_time); //time_t의 값은 32 or 64비트, 
					//localtime()을 이용해서 쉬운 형태로 변환

	cout << "Make Jacs 시작 : " << curr_tm->tm_hour << "시 " << curr_tm->tm_min << "분 " << curr_tm->tm_sec << "초" << "\n";
	//std::chrono::system_clock::now() -> 현재 시간
	std::chrono::system_clock::time_point start_time = std::chrono::system_clock::now();

	mpSBILastFrame->MakeJacs(); //측정하고자 하는 코드 

	std::chrono::system_clock::time_point end_time = std::chrono::system_clock::now();
	cout << "Make Jacs 끝 : " << curr_tm->tm_hour << "시 " << curr_tm->tm_min << "분 " << curr_tm->tm_sec << "초" << "\n";

	std::chrono::milliseconds mill = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
	std::chrono::microseconds micro = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
	std::chrono::nanoseconds nano = end_time - start_time;

	cout << "Make Jacs time : " << mill.count() << " milliseconds" << "\n";
	cout << "Make Jacs time : " << micro.count() << " microseconds" << "\n";
	cout << "Make Jacs time : " << nano.count() << " nanoseconds" << "\n" << "\n";



	pair<SE2<>, double> result_pair;

	cout << "IPRTT 시작 : " << curr_tm->tm_hour << "시 " << curr_tm->tm_min << "분 " << curr_tm->tm_sec << "초" << "\n";
	std::chrono::system_clock::time_point start_t = std::chrono::system_clock::now();

	result_pair = mpSBIThisFrame->IteratePosRelToTarget(*mpSBILastFrame, 6); // 측정하고자 하는 코드
    
	std::chrono::system_clock::time_point end_t = std::chrono::system_clock::now();
	cout << "IPRTT 끝 : " << curr_tm->tm_hour << "시 " << curr_tm->tm_min << "분 " << curr_tm->tm_sec << "초" << "\n";


	std::chrono::milliseconds milli_seconds = std::chrono::duration_cast<std::chrono::milliseconds>(end_t - start_t);
	std::chrono::microseconds micro_seconds = std::chrono::duration_cast<std::chrono::microseconds>(end_t - start_t);
	std::chrono::nanoseconds nano_seconds = end_t - start_t;

	cout << "IPRTT time : " << milli_seconds.count() << " milliseconds" << "\n";
	cout << "IPRTT time : " << micro_seconds.count() << " microseconds" << "\n";
	cout << "IPRTT time : " << nano_seconds.count() << " nanoseconds" << "\n" << "\n";

	SE3<> se3Adjust = SmallBlurryImage::SE3fromSE2(result_pair.first, mCamera);
	mv6SBIRot = se3Adjust.ln();
}

위 코드 출력 결과입니다.

보시다시피 수행 속도가 매우 빨라서 큰 단위로는 출력이 되지 않는 결과값들이 존재합니다.

따라서 (1)편에서 알아본 chrono 방식을 이용하여 보다 작은 단위로 측정하니 확인 가능한 점을 알 수 있습니다.

 

 

 

 

 

'C++' 카테고리의 다른 글

[c++] 시간 측정하기 (1) - 수행시간 측정  (0) 2021.07.14
댓글
공지사항