パフォーマンスカウンタ
BOOL QueryPerformanceFrequency(
LARGE_INTEGER *lpFrequency
);
高分解能パフォーマンスカウンタの周波数を取得します。
パフォーマンスカウンタをサポートしていない時は、0が返ります。
lpFrequency | カウンタの周波数(カウント毎秒)を受け取る64ビット整数へのポインタ |
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount
);
高分解能パフォーマンスカウンタの現在値を取得します。
lpPerformanceCount | 現在のカウントを受け取る64ビット整数へのポインタ |
このタイマは、すべてのマシンで利用できるわけではありません。
また、現在製造されているすべてのプロセッサでサポートされていますが、
古いプロセッサの中にはサポートしないものもあります。
このため、プログラムではこのタイマが存在するかどうかをテストし、
利用できない場合はtimeGetTime()を使うようにしなければなりません。
#define UPDATE_TICKS_MS 100
_int64 start, end, freq, update_ticks_pc
MSG msg;
if ( !QueryPerformanceFrequency( ( LARGE_INTEGER* )&freq ) )
return -1;
update_ticks_pc = UPDATE_TICKS_MS * freq / 1000;
QueryPerformanceCounter( ( LARGE_INTEGER* )&start );
while ( GetMessage( &msg, NULL, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
QueryPerformanceCounter( ( LARGE_INTEGER* )&end );
while ( ( end - start ) >= update_ticks_pc ) {
UpdateWorld();
start += update_ticks_pc;
}
}
return msg.wParam;
あまり良いサンプルじゃない。