ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Visual Basic User's ClubコミュのGetTickCountについて教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
VB初心者です。
さっそくですが、VBで、msecのデータを扱うのに”GetTickCount”を使っていますが、精度はともかくまれにありえない大きな数値が帰ってきます。プログラムと実行結果は下記の通りですが、何が原因でしょうか?
OSは、WindowsXPです。
アドバイスよろしくお願いします。


<プログラム>
Dim BeforeTime As Long
Dim NowTime As Long
Dim n As Integer
'システムを立ち上げてからの経過時間(単位:ミリ秒)を取得
Private Declare Function GetTickCount Lib "Kernel32" () As Long
'実行処理
Private Sub buttonRun_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles buttonRun.Click
For n = 1 To 20
TimeCheck()
Next
End Sub
'データ取得&表示
Private Sub TimeCheck()
BeforeTime = GetTickCount
TextBox1.Text = TextBox1.Text & n & " : " & BeforeTime & " " & BeforeTime - NowTime & ControlChars.CrLf
NowTime = BeforeTime
End Sub


<実行結果>
No 現在の取得値  → 前回との差
------------------------------------
0 : 225661890149886 → 初回取得値
1 : 225661890149886 → 0
2 : 225661890149886 → 0
3 : 225661890149886 → 0
4 : 225661890149886 → 0
5 : 225661890149886 → 0
6 : 225661890149886 → 0
7 : 225661890149886 → 0
8 : 225661890149886 → 0
9 : 225661890149886 → 0
10 : 225661890149886 → 0
11 : 225666185117197 → 4294967311
12 : 225666185117197 → 0
13 : 225666185117197 → 0
14 : 225666185117197 → 0
15 : 225666185117197 → 0
16 : 225666185117197 → 0
17 : 225666185117197 → 0
18 : 225666185117197 → 0
19 : 225666185117197 → 0
20 : 225666185117213 → 16

以上

コメント(9)

デフォルトのタイマーの分解能が低いからです。

http://msdn.microsoft.com/ja-jp/library/cc429827.aspx
|システムを起動した後の経過時間を、ミリ秒(ms)単位で取得します。この時間は、システムタイマの分解能による制限を受けます。システムタイマの分解能を取得するには、GetSystemTimeAdjustment 関数を使います。

分解能をあげる手もありますが、timeGetTime APIを使ったほうがいいでしょう。
http://www.sm.rim.or.jp/~shishido/tick.html
32bitOS上でLong型(64bit符号付)を使用しているからでは?
UInt32型なら大丈夫かな?
まみむめマ さん、みなさん、ありがとうございました。

『Win32APIを.NETに移行するにあたってLong型はInteger型に変更する必要があるようです』でした。

Long型をIntegser型にするとうまくいきました。
Private Declare Function GetTickCount Lib "Kernel32" () As Long
  ↓
Private Declare Function GetTickCount Lib "Kernel32" () As Integer
とすることで問題解決しました。

助かりました。
良ければ、上手く行ったバージョンの実行結果を教えていただけますでしょうか?

今後の参考にしたいと思います。
宜しくお願いします。
そういう姿勢は大事ですね。
でも結果も示してあればこの掲示板はより有用になりますよ。

ところで、DateTime.Ticks プロパティという手もあります。
http://msdn.microsoft.com/ja-jp/library/system.datetime.ticks.aspx

ミリ秒単位で精度が必要なら、マイコンを利用した方が良いと思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Visual Basic User's Club 更新情報

Visual Basic User's Clubのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング