티스토리 뷰
저번 포스팅에 이어서 이번에는 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 |
---|
댓글
공지사항