프로그래밍 언어/C++

[C++] 시간 측정 방법

riroan 2022. 7. 21. 22:26

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