Showing posts with label 시간측정. Show all posts
Showing posts with label 시간측정. Show all posts
2010/03/24
QueryPerformanceCounter 이용한 StopWatch 클래스
#pragma once<
class CAStopWatch
{
private:
int m_Initialized;
BOOL m_BeginFlag;
__int64 m_Frequency;
__int64 m_BeginTime;
__int64 m_EndTime;
__int64 m_i64Elapsed;
double m_dblElapsed;
public:
CAStopWatch(void)
{
// Get CPU Frequency
m_Initialized = QueryPerformanceFrequency((LARGE_INTEGER *)&m_Frequency);
m_BeginFlag = FALSE;
}
virtual ~CAStopWatch(void)
{
}
BOOL Begin()
{
if( !m_Initialized )
{
return 0;
}
// Get Begin Counter
m_BeginFlag = QueryPerformanceCounter( (LARGE_INTEGER *)&m_BeginTime );
return m_BeginFlag;
}
double End()
{
if( !m_Initialized || !m_BeginFlag )
{
return 0.0;
}
// Get End Counter
QueryPerformanceCounter( (LARGE_INTEGER *)&m_EndTime );
// calculate elapse count
m_i64Elapsed = m_EndTime - m_BeginTime;
// Convert count to second
m_dblElapsed = (double)m_i64Elapsed / (double)m_Frequency;
return m_dblElapsed;
}
BOOL Available()
{
return m_Initialized;
}
__int64 GetFreq()
{
return m_Frequency;
}
double GetElapsedTime()
{
return m_dblElapsed;
}
double GetElapsedSecond()
{
return m_dblElapsed;
}
double GetElapsedMillisecond()
{
return m_dblElapsed * 1000;
}
double GetElapsedMicroSecond()
{
return m_dblElapsed * 1000000;
}
};
// 사용 예
CAStopWatch watch;
watch.Begin();
:
:
watch.End();
double sec = watch.GetElapsedSecond();
Original Post : http://neodreamer-dev.tistory.com/391
Labels:
QueryPerformanceCounter
,
QueryPerformanceFrequency
,
StopWatch
,
TistoryOldPost
,
고정밀 시간 측정
,
시간측정
2010/02/22
QueryPerformanceCounter 함수를 이용한 시간 측정
#include
#include
__int64 ctr1 = 0, ctr2 = 0, freq = 0;
int acc = 0, i = 0;
// Start timing the code.
if (QueryPerformanceCounter((LARGE_INTEGER *)&ctr1)!= 0)
{
// Code segment is being timed.
for (i=0; i<100; i++) acc++;
// Finish timing the code.
QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);
Console::WriteLine("Start Value: {0}",ctr1.ToString());
Console::WriteLine("End Value: {0}",ctr2.ToString());
QueryPerformanceFrequency((LARGE_INTEGER *)&freq);
Console::WriteLine("QueryPerformanceCounter minimum resolution: 1/{0} Seconds.",freq.ToString());
Console::WriteLine("100 Increment time: {0} seconds.",((ctr2 - ctr1) * 1.0 / freq).ToString());
}
else
{
DWORD dwError = GetLastError();
Console::WriteLine("Error value = {0}",dwError.ToString());
}
// Make the console window wait.
Console::WriteLine();
Console::Write("Press ENTER to finish.");
Console::Read();
return 0;
////////////////////////////////////////////////////////////////
// Result
Start Value: 192244814693193
End Value: 192244814694677
QueryPerformanceCounter minimum resolution: 1/1263460000 Seconds.
100 Increment time: 1.17455241954633E-06 seconds.
QueryPerformanceCounter 를 활용한 시간 측정 코드 이다. CPU 의 동작속도를 이용하여 시간을 측정하는 방법으로 GetTickCount 보다 정확한 시간을 측정할 수 있다.
Labels:
QueryPerformanceCounter
,
TistoryOldPost
,
시간측정
,
정확한 시간 측정
Subscribe to:
Posts
(
Atom
)