マルチメディアタイマーの使用

<通常のタイマーより正確な時間を得る>

VBには簡単に使用できる便利なタイマーが付属していますが、お世辞にも正確とは言えません。ゲームやシーケンサーなど正確な割り込みを必要とするソフトにはマルチメディアタイマーが必須です。

宣 言

Declare Function timeKillEvent Lib "WINMM" (ByVal uID&) As Long
Declare Function timeSetEvent Lib "WINMM" (ByVal uDelay&, ByVal uResolution&, ByVal lpFunction&, ByVal dwUser&, ByVal uFlags&) As Long

処 理 の 流 れ

1、timeSetEventでタイマーを開始

2、lpFunctionで指定したプロシージャにメッセージが送られてきたら必要な処理をする

3、タイマーが必要なくなったらtimeKillEventでタイマーを削除

サ ン プ ル プ ロ グ ラ ム

まずフォームモジュールと標準モジュールを追加し以下のコードを張り付けて実行してください。なお絶対にフォームのXボタンで終了するようにしてください。VB環境内の停止ボタンで終了すると、ページ違反が起こります(処理の流れ(3)が行えない)。

動作確認:Visual Basic 5.0(Visual Basic 4.0では動作しません(AddressOfを使用)),Windows98

フォームモジュール(Form1)
Option Explicit
Dim tmevent As Long

Private Sub Form_Load()
'第5引数を0にすると最初の一回だけTimerProcが呼び出される
tmevent = timeSetEvent(10, 1, AddressOf TimeProc, 0, 1)
st = GetTickCount
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
timeKillEvent tmevent
End Sub
標準モジュール
Option Explicit

Declare Function timeKillEvent Lib "WINMM" (ByVal uID&) As Long
Declare Function timeSetEvent Lib "WINMM" (ByVal uDelay&, ByVal uResolution&, ByVal lpFunction&, ByVal dwUser&, ByVal uFlags&) As Long

Public Function TimeProc(ByVal IDEvent As Long, ByVal uReserved As Long, ByVal dwUser As Long, ByVal dwReserved1 As Long, ByVal dwReserved2 As Long) As Long
'ここに処理を記述(十ミリ秒に一回呼び出されます)
End Function


トップに戻る
Visual Basicワンポイントテクニック目次に戻る

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!