C++ - Visual C++ 에서의 std::chrono의 고해상도 시계

Visual Studio 2015 이전에는 std::chrono(high_resolution_clock을 사용해도)로 시간 측정을 하면 nano 단위로는 측정할 수 없었다.
그래서 VC에서 nano 단위로 측정하려면 이전처럼 Win32 API인 PerformanceCounter를 사용해야 했다.
그러나 Visual Studio 2015부터는 nano 단위의 측정이 가능하다.

#include <iostream>
#include <chrono>
#include <typeinfo>
#include <ctime>

template<typename Clock>
void resolution() 
{
	using namespace std;

	cout << typeid(Clock).name() << endl;

	for (int i = 0; i < 5; ++i) 
	{
		Clock::time_point t0 = Clock::now();
		Clock::time_point t1;
	
		do 
		{
			t1 = Clock::now();
		} while (t0 == t1);

		cout << chrono::duration_cast<chrono::nanoseconds>(t1 - t0).count() << " [ns]\t"
			<< chrono::duration_cast<chrono::microseconds>(t1 - t0).count() << " [micro-s]" << endl;
	}

	cout << endl;
}

int main() 
{
	using namespace std;
	chrono::system_clock::time_point time = chrono::system_clock::now();
	time_t system_time = chrono::system_clock::to_time_t(time);
	cout << ctime(&system_time) << endl;

	resolution<chrono::system_clock>();
	resolution<chrono::steady_clock>();
	resolution<chrono::high_resolution_clock>();
}




출처


이 글은 2018-01-16에 작성되었습니다.