C언어에서 시간을 측정할 때 time.h헤더를 사용하거나 windows.h헤더를 사용하여 시간을 측정한 기억이 있다.
time은 직관적이었지만 정밀한 측정이 힘들었고, windows.h의 QueryPerformanceCounter 함수를 이용한 측정은 꽤 정밀하지만 비직관적이었다. (리눅스에서는 사용도 못한다.)
C++는 보다 정밀한 측정을 기본적으로 제공한다.
#include<chrono>
시간의 신 크로노스(Chronos)에서 따왔다고 한다.
핵심 기능인 시간을 측정하는 코드는 다음과 같다.
std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
// do Something;
std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
std::cout << duration.count()<<"seconds" << std::endl;
duration.count()에서 측정된 시간을 초단위로 확인할 수 있다.
여기서 std::chrono::system_clock::time_point타입은 타입명이 상당히 길기 때문에 auto로 대체할 수 있다.
하지만 duration은 auto로 사용하면 std::chrono::system_clock::time_point타입으로 나오기 때문에 count함수를 사용할 수 없다.
그래서 duration은 타입을 명시해야 한다.
std::chrono::system_clock::now() : 현재 시각을 나타낸다. cout으로 출력하면 현재시각을 밀리초단위까지 보여준다.
++ 추가
시간을 지연시키는 함수가 있다.
평소에는 쓸일이 잘 없겠지만 게임개발이나 멀티스레딩 환경에서 사용할 일이 있기 때문에 남겨놓도록 한다.
#include<chrono>
#include<thread>
int main() {
std::this_thread::sleep_for(std::chrono::nanoseconds(1)); // 1e-9초 지연
std::this_thread::sleep_for(std::chrono::microseconds(1)); // 1e-6초 지연
std::this_thread::sleep_for(std::chrono::milliseconds(1)); // 1e-3초 지연
std::this_thread::sleep_for(std::chrono::seconds(1)); // 1초 지연
std::this_thread::sleep_for(std::chrono::minutes(1)); // 1분 지연
std::this_thread::sleep_for(std::chrono::hours(1)); // 1시간 지연
}
알아두면 언젠간 쓸 것 같다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 난수 생성 방법 (0) | 2022.07.08 |
---|