C์ธ์ด๋ก ์ง ํ๋ก๊ทธ๋๋ฐ์ด ์ผ๋ง๋ ๋น ๋ฅผ๊น ๊ถ๊ธํ ๋๊ฐ ์๋ค.
(์ ๊ถ๊ธํด์ผ ํ๋๊ณ ?)
๊ทธ...๊ทธ๊ฑฐ์ผ ๊ฒ์ ๋ง๋๋๊น...
์ ์ด์ ํ์์์ง? ์์ฆ์ ์ปดํจํ ํ์๊ฐ ๊ดด๋ฌผ์ด๋ผ์ (์๋ฌด๋ฃฉ)
์ํผ ๊ทธ๋๋ ๋ ๊ถ๊ธํ๋ค.
์ํํธ์จ์ด์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ์ฑ๋ฅ์ ์ธก์ ํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์๋์ ๊ฐ์ด ํ ๋ค์์ (2)-(1)ํด์ ๊ฑธ๋ฆฐ ์๊ฐ์ ์ธก์ ํ๋ค.
// ์์
์์ ์๊ฐ ์ ์ฅ(1)
// ์์
// ์์
์ข
๋ฃ ์๊ฐ ์ ์ฅ(2)
<time.h>์ clock()
์ฝ๋๋ก ๋ณด๋ฉด ์ด๋ฐ ์์ด๋ค.
#include <stdio.h>
#include <time.h>
main()
{
clock_t start,end;
start = clock();
/* ๋ฃจํ ์์ */
int j;
for(int i=0; i<100000000;i++) { j += j + i; }
/* ๋ฃจํ ์ข
๋ฃ */
end = clock();
printf("Exeution period is %.3f sec.\n",(double)(end-start)/CLOCKS_PER_SEC);
}
<time.h>์ gettimeofday()
์ข ๋ ๊น๋ํ ๋ฐฉ๋ฒ
cTimer timer; // ํ์ด๋จธ ํด๋์ค
timer.start(); // ์์
์์ ์๊ฐ ์ ์ฅ(1)
//์์
timer.check(); // ์์
์๊ฐ ๊ณ์ฐ (2-1)
cTimer๋ time.h์ ์๋ gettimeofday()๋ฅผ ์ด์ฉํ๋ค.
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
class cTimer
{
struct timeval timeBegined;
struct timeval timeEnded;
public:
void start()
{
gettimeofday(&timeBegined, NULL);
}
void check()
{
gettimeofday(&timeEnded, NULL);
static char time_str[64];
time_t *p_time;
struct tm *p_tm;
int a;
p_time = (time_t *)&(timeEnded.tv_sec);
p_tm = localtime(p_time);
sprintf( time_str, "%02d%02d%02d.%03ld",
p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec,
timeEnded.tv_usec/10000 );
a = int(atof(time_str)*1000);
p_time = (time_t *)&(timeBegined.tv_sec);
p_tm = localtime(p_time);
sprintf( time_str, "%02d%02d%02d.%03ld",
p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec,
timeBegined.tv_usec/10000 );
a = a - int(atof(time_str)*1000);
printf(" Elapsed Time : %.3f sec\n", float(a)/1000.0f);
}
};
QueryPerformanceCounter
๊ทผ๋ฐ... ๋ ์ข์ ๋ฐฉ์์ด ์๋ค.
void InitnStartCheckElapsedTime( void )
{
LARGE_INTEGER qwTicksPerSec, qwTime;
m_bUsingQPF = (bool) (QueryPerformanceFrequency( &qwTicksPerSec ) != 0);
if( !m_bUsingQPF )
return;
m_llQPFTicksPerSec = qwTicksPerSec.QuadPart;
QueryPerformanceCounter( &qwTime );
m_llLastElapsedTime = qwTime.QuadPart;
}
float GetElapsedTime( void )
{
if( !m_bUsingQPF )
return -1.0;
LARGE_INTEGER qwTime;
QueryPerformanceCounter( &qwTime );
float fElapsedTime = (float)((double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec);
m_llLastElapsedTime = qwTime.QuadPart;
return fElapsedTime;
}
์ถ์ฒ: https://kindtis.tistory.com/79 [Game Programmer Life]
๋ฉํฐ์ฝ์ด ๊ธฐ๋ฐ ์์คํ ์์ ์ค์๋
์ถ์ฒ: 2009.08.22.๋ช ๊ตญ์ง(http://magicpotato.com)
์ฌ๋ฌ๊ฐ์ CPU ๋๋ ๋ฉํฐ์ฝ์ด๊ธฐ๋ฐ์ ์์คํ ์์ timeGetTime(), QueryPerformanceCounter()๋ฑ ๋ช๊ฐ์ง ์๊ฐํจ์๊ฐ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
BIOS๋ ๋๋ผ์ด๋ฒ์ ๋ฌธ์ ๋ก ์ธํด์ ๋ฐ์ํ๋ ๋ฒ๊ทธ์ธ๋ฐ ์ต๊ทผ์๋ ๊ฑฐ์ ๋ฐ์ํ์ง ์๋ ๋ฌธ์ ์ง๋ง, ์๋ฒ ํ๋ก๊ทธ๋๋จธ๋ผ๋ฉด ๋น์ฐํ ์์๋ฌ์ผ ํ๋ ์ด์์ด๋ค.
์๊ฐ์ ์ฒ๋ฆฌํ๋ ์ฐ๋ ๋๋ SetThreadAffinityMask() ํจ์๋ฅผ ์ด์ฉํด์ ํ๊ฐ์ CPU์์๋ง ์๋ํ๋๋ก ๊ฐ์ ์ํฌ ์ ์๋ค.
ํด๋น ๋ฌธ์ ์ ๋ํ ๋ฌธ์๋ ๋ค์ ๋งํฌ์์ ํ์ธํ ์ ์๋ค.
MSDN Technical Articles - Game Timing and Multicore Processors
http://msdn.microsoft.com/en-us/library/ee417693(VS.85).aspx
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > ํ๋ก๊ทธ๋๋ฐ ์ด๋ณด๊ฐ ๊ฒช๋ ๋ฌธ์ ๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2021 ์นด์นด์ค ์ ์ ๊ณต์ฑ 1์ฐจ ์จ๋ผ์ธ ์ฝ๋ฉ ํ ์คํธ (0) | 2021.02.09 |
---|---|
hash_map<string, int> ์ฌ์ฉ์ ์ค๋ฅ๊ฐ ๋๋ค. (0) | 2021.02.06 |
for๋ฌธ๋ ๋ชจ๋ฅด๋ ๋ฐ๋ณด (0) | 2021.02.03 |
gcc์์ __gxx_personality_v0 ์๋ฌ๋ ๋ (0) | 2021.02.03 |
Segment Failed (or Fault) (0) | 2021.02.03 |