|
処理時間を計算するために使う関数はいくつかありますが、処理直前と直後の時間の
差分を計算するという点では基本的に使い方は同じです。用途に応じて使い分けてください。
GetTickCount()
Windows起動からの経過時間をミリ秒単位で返す。精度は数十ミリ秒程度。
timeGetTime()
関数を使用するためにはwinmm.libをリンクし
mmsystem.hをインクルードする。
GetTickCountと同様にWindows起動からの経過時間をミリ秒単位で返す。
timeBeginPeriod,timeEndPeriodを使うことで精度の調整をすることができる。
デフォルトで5ミリ秒に設定されており、最高で1ミリ秒の精度指定が可能
QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
LARGE_INTEGER構造体に、高分解能パフォーマンスカウンタの現在値が格納される。
QueryPerformanceFrequencyを使うことでカウンタの周波数を知ることが
できるので、カウンタの差分を周波数で割れば処理時間を算出できる。1ミリ秒よりも小さい
間隔で測定可能。
(例)
LARGE_INTEGER nFreq, nBefore, nAfter;
DWORD dwTime;
//変数の初期化
memset(&nFreq, 0x00, sizeof nFreq);
memset(&nBefore, 0x00, sizeof nBefore);
memset(&nAfter, 0x00, sizeof nAfter);
dwTime = 0;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nBefore);
Sleep(100);//計算したい処理
QueryPerformanceCounter(&nAfter);
dwTime = (DWORD)((nAfter.QuadPart - nBefore.QuadPart) * 1000 / nFreq.QuadPart);
printf("%d ミリ秒\n", dwTime);
※ハードウェアがパフォーマンスカウンタをサポートしていないときは、QueryPerformace〜関数は0を返します。
|
関連リンク
GetTickCount(MSDN)
timeGetTime(MSDN)
QueryPerformanceFrequency(MSDN)
|
|