処理時間の取得方法
処理時間を計算するために使う関数はいくつかありますが、処理直前と直後の時間の 差分を計算するという点では基本的に使い方は同じです。用途に応じて使い分けてください。

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)

戻る