Program-02 精度の良いタイマーを利用する

Q SetTimer関数でタイマーを設定したのですが、精度にどうも納得がいきません。
例えば、1ミリ秒間隔に設定しても1秒間に約20回しかイベントが発生しなかったりします。
もっと精度の良いタイマーは利用できないものでしょうか。
A timeSetEvent関数を使えばできます。
どう使う?
'関数の宣言(コードの一番上の部分に書くことを推奨)
Declare Function
timeSetEvent Lib "winmm" (uDelay As DWord, uResolution As DWord, lpTimeProc As DWord, dwUser As DWordPtr, fuEvent As DWord) As DWord
Declare Function timeKillEvent Lib "winmm" (uTimerID As DWord) As DWord
'グローバル変数の宣言
Dim uTimerID As DWord
'コールバック関数の宣言
Function TimeProc(uID As DWord, uMsg As DWord, dwUser As DWord, dw1 As DWord, dw2 As DWord) As DWord
    'ここに処理を追加する
End Function
'タイマーの設定
uTimerID=timeSetEvent(100,0,AddressOf(TimeProc),0,1)
'タイマーの破棄
timeKillEvent(uTimerID)
今回は少し難易度が高くなりました。
timeSetEventの第1引数は、イベントの間隔(単位:ミリ秒)です。ここに1を指定すれば、1ミリ秒間隔でイベント処理を行ってくれます。
それからコールバック関数ですが、これは自分で呼び出すのではなく、タイマーが自動的に呼び出してくれる関数です。
この中に処理を記述しておくと、指定した間隔で処理を行ってくれます。
これは、SetTimerに比べて精度が良いです。
1ミリ秒単位の正確なイベントが発生させられますし、細かい数字ではなくても、その精度には差が出てきます。
※SetTimerでは、最低でもWin95系で55ミリ秒・WinNT系で10ミリ秒間隔のイベントしか出せないようです。よってそれ以下の間隔を指定しても、55ミリ秒・10ミリ秒間隔でイベントが発生することになります。
なお、SetTimerにもいえることですが、使用が終わったら必ずタイマーを破棄してください。

メニューに戻る