ストップウォッチによる経過時間の取得方法について
を改造してClass Module化する。
標準モジュール
Sub test()
Dim startTime As Long
Dim endTime As Long
Dim clsTimer As timeGetTimeClass: Set clsTimer = New timeGetTimeClass ' Dim And New For timeGetTimeClass
Debug.Print clsTimer.Get_Timer
strattime = clsTimer.Get_Timer
endTime = clsTimer.Get_Timer
Debug.Print (endTime - startTime) / 1000 '1000
End Sub
Class Module ( timeGetTimeClass)
'''''''''''''''''''''''''''''''''''''
' Class Module
' timeGetTimeClass
' Win 64/32
' Win32API 関数の timeGetTime を使用します。今回、1秒ごとに経過時間の合計を表示するため、Timer コントロールを使用します。
''''''''''''''''''''''''''''''''''''''''
# If VBA7 Then
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
# Else
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
# End If
Property Get Get_Timer() As Long
Get_Timer = timeGetTime
End Property
''''SampleCode For Module
' 標準モジュールコ用のコードです
'Sub testTimerContlrol()
'Dim clsTimer As timeGetTimeClass: Set clsTimer = New timeGetTimeClass ' Dim And New For timeGetTimeClass
'Debug.Print clsTimer.Get_Timer
'End Sub
システムを起動した後の経過時間を、ミリ秒(ms)単位で取得します。この時間は、システムタイマの分解能による制限を受けます。システムタイマの分解能を取得するには、GetSystemTimeAdjustment 関数を使います。
DWORD GetTickCount(VOID);
パラメータ
パラメータはありません。
戻り値
関数が成功すると、システムを起動した後の経過時間が、ミリ秒単位で返ります。
解説
経過時間は DWORD 型で保存されています。システムを 49.7 日間連続して動作させると、経過時間は 0 に戻ります。
より高い分解能のタイマが必要な場合は、「」(マルチメディアタイマ)または「」(高分解能タイマ)を使います。
Windows NT/2000:コンピュータを起動した後の経過時間を取得するには、レジストリの HKEY_PERFORMANCE_DATA キー内の System Up Time カウンタを取得します。この値は、8 バイトです。詳細については、MSDN ライブラリの「」を参照してください。
Example
次のサンプルコードは、タイマが 0 に戻る現象に対処する方法を示します。
DWORD dwStart = GetTickCount();
// 極端に長い時間が経過した場合は、実行を停止する。
if(GetTickCount() - dwStart>= TIMELIMIT)
Cancel();
ここで、TIMELIMIT は、アプリケーションが関心を持つ特定の経過時間を意味します。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用