パフォーマンスカウンタ


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;


あまり良いサンプルじゃない。
Windows > メッセージループ | comments (0) | trackbacks (0)

Comments

Comment Form

icons:

Trackbacks