タイマー処理は、こんな感じ?
最近、書いていることが硬いのぉ~。
いかん、いかん。
もっと、チャラチャラ書くぞぉ!
さて!
今回は、最終回!
ようやくタイマーが完成する!
多分…。
でも、ボケのプログラムだから
ボケボケなのは、
お約束だょぉ!
#pragma comment( lib, "WinMm.lib" )
//--------------------------------------
#include <Windows.h>
#include <StdIo.h>
//--------------------------------------
#define WAIT_TIME ( 1000 / 60 )
#define LIST_MAX 1000
//--------------------------------------
DWORD ( WINAPI* TimerGet )( void );
//--------------------------------------
void TimerCreate( void )
{
OSVERSIONINFO OsVersionInfo;
timeBeginPeriod( 1 );
OsVersionInfo.dwOSVersionInfoSize = sizeof( OsVersionInfo );
GetVersionEx ( &OsVersionInfo );
TimerGet = ( OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) ? GetTickCount : timeGetTime;
}
//--------------------------------------
void TimerRelease( void )
{
timeEndPeriod( 1 );
}
//--------------------------------------
void TimerWait( void )
{
static DWORD Back = 0;
DWORD Wait;
if( ( Wait = TimerGet( ) - Back ) < WAIT_TIME )
Sleep( WAIT_TIME - Wait );
Wait = TimerGet( ) - Back;
Back += Wait - ( Wait % WAIT_TIME );
}
//--------------------------------------
void main( void )
{
DWORD Now, Old, List[LIST_MAX];
int Count;
// 初期化
TimerCreate( );
Count = 0;
Old = 0;
// メイン処理ループ
while( Count < LIST_MAX )
{
TimerWait( );
// メイン処理
List[Count++] = ( Now = TimerGet( ) ) - Old;
Old = Now;
}
for( Count = 0 ; Count < LIST_MAX ; Count++ )
printf( "%d\n", List[Count] );
TimerRelease( );
}
取り合えず完成か?
いや!
完成したことにしよう!
98では、これでいい感じに動くんだもん!
…。
でも、2Kだといい感じに動いてくれない…。
…。
「Sleep」のタイマーは、「GetTickCount」を
ベースにしているらしく2Kだと
精度が出ない…。
と言うことで以下のように修正することで
解決するのだが…。
//--------------------------------------
void TimerWait( void )
{
static DWORD Back = 0;
DWORD Wait;
while( ( TimerGet( ) - Back ) < WAIT_TIME )
Sleep( 0 );
Wait = TimerGet( ) - Back;
Back += Wait - ( Wait % WAIT_TIME );
}
だが、これはこれで問題がある。
「プロセッサ使用率」が100%に
なってしまうのだ…。
「Sleep」が入れてあるので
他のプロセスやスレッドが十分に
実行できるのだが…。
と言うことで気にしないというのも手だ!
ゲームなんかは、これで良いんじゃない?
でも、長時間実行する計測する処理の場合には
ちょっとまずいかな?
2Kでも精度がでる「Sleep」を
自作しないとならないのかぁ…。
そいつは、気が向いたらと言うことで…。
…。
はあ、疲れた…。
お休みなさい…。
| 固定リンク
コメント