アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

以上

A 回答 (2件)

VBのバージョンと関数定義が間違っています。


> Handles buttonRun.Click
このコードは VB.NET 以降のもの。

VB.NET 以前(VB6.0など)と大きく仕様変更がありました。
処理のベースが 16bit→32bit に変わりました。
http://msdn.microsoft.com/ja-jp/library/dd297710 …

> Private Declare Function GetTickCount Lib "Kernel32" () As Long
この定義は VB.NET 以前のものですので、Long を Integer に
変更する必要があります。

ただ、GetTickCount って System.Environment.TickCount
がフレームワーク上から呼び出していたような気もします。
http://dobon.net/vb/dotnet/system/tickcount.html
自分で初心者と言っているような人が API 宣言使うより、
フレームワークの関数を利用した方がいいと思います。
    • good
    • 0
この回答へのお礼

丁寧な回答大変ありがとうございました。
Long を Integer にしたら解決しました。
助かりました。

お礼日時:2011/06/30 19:20

VBを使っていないので、見当はずれの横槍になるかもしれませんが。



まずこれをわかりやすく書いてください。
他人が見た時は無意味なデータで混乱します。
TextBox1.Text = TextBox1.Text & n & " : " & BeforeTime & " " & BeforeTime - NowTime & ControlChars.CrLf

TextBox1.Text = TextBox1.Text & n & " : " & BeforeTime - NowTime & ControlChars.CrLf

・VBの数値の型とAPIの型は合っているでしょうか。違っているような気がします。
そのためにこんなありえない値が出るのではないかと。4,294,967,311
昔のlongと今のVBのlongではビット数が2倍違うのでは?

・私の古いXP機、Excel VBAでもわずか1msで8000回も取得できます。
プログラムがCPUを占有していると数百msくらいになることはあるかもしれません。
0以外の値を簡単に取得したければループの中にDoeventsを入れてください。

VBAの場合で、また私のHPなのですが参考にしてください。
http://homepage2.nifty.com/DreamyCat/APIpage1.htm
    • good
    • 0
この回答へのお礼

丁寧な回答大変ありがとうございました。
型でした、型を合わせたら解決しました。
助かりました。

お礼日時:2011/06/30 19:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!