システム時刻をミリ秒単位で取得(T) <TOP>
システム時刻をミリ秒単位で取得します。システム時刻は Windows が起動してから経過した時間です。
timeGetTime システムが起動してからの起動時間を取得
timeBeginPeriod
アプリケーションまたはデバイスドライバの最小タイマ分解能を設定
timeEndPeriod 以前にセットされた最小タイマ分解能をクリア
計算では常に、2 つの timeGetTime関数の戻り値の差を使います。
精度は95系では1ms、NT系では5msだそうです。
NT系の精度を上げる場合timeGetTimeの開始タイマサービスの使用直前に timeBeginPeriod を呼び出し、タイマサービスの使用終了後ただちに timeEndPeriod 関数を呼び出すそうです。
例では、for 〜 next および、while 〜 wend で 10000000回の空ループの時間を計測しています。
計測マシンはAMD/946MHzでの値です。
参照URL(2005/05/06現在)
'================================================================ '= システム時刻をミリ秒単位で取得 '= (timeGetTime.bas) '================================================================ #include "Windows.bi" ' システムが起動してからの起動時間を取得 Declare Function Api_timeGetTime& Lib "winmm" Alias "timeGetTime" () ' アプリケーションまたはデバイスドライバの最小タイマ分解能を設定 Declare Function Api_timeBeginPeriod& Lib "winmm" Alias "timeBeginPeriod" (ByVal uPeriod&) ' 以前にセットされた最小タイマ分解能をクリア Declare Function Api_timeEndPeriod& Lib "winmm" Alias "timeEndPeriod" (ByVal uPeriod&) Var Shared Text1 As Object Var Shared Radio1 As Object Var Shared Radio2 As Object Var Shared Button1 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Radio1.Attach GetDlgItem("Radio1") : Radio1.SetFontSize 14 Radio2.Attach GetDlgItem("Radio2") : Radio2.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Function Index bdecl () As Integer Function Index() Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1 End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var i As Long Var Ret As Long Text1.SetWindowText "10000000回の空ループ" SetMousePointer 2 '開始時間取得 Ret = Api_timeBeginPeriod(1) nStart = Api_timeGetTime() '空ループ If Index = 0 Then For i = 0 To 10000000 : Next Else i = 0 While i <= 10000000 i = i + 1 Wend End If ' 完了時間取得 nEnd = Api_timeGetTime() Ret = Api_timeEndPeriod(1) ' 処理結果出力 Text1.SetWindowText Str$((CDbl(nEnd) - CDbl(nStart)) / 1000) & "秒かかりました。" SetMousePointer 0 End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End