
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
以上
No.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 宣言使うより、
フレームワークの関数を利用した方がいいと思います。
No.1
- 回答日時:
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
JSP+Servletでのページングの常識
-
PHP8でWarning:Undefined varia...
-
VBAでActiveDirectoryのユーザ...
-
VBA リストボックス内の値を複...
-
ActionScriptで、マシンのCPU使...
-
Flexgridで選択行の列の値を取...
-
VBA:小数点以下の数字を取得で...
-
小数点を含む数値の切捨て
-
like演算子内に変数って使えな...
-
VBAで期間が何か月間なのかを取...
-
利用者側のMACアドレスを取得し...
-
郵便番号検索APIにてget Elemen...
-
count(*)で取得した値をJAVAの...
-
DataGridView 複数選択で行番...
-
JavaScriptにおいてコンピュー...
-
IFRAME内のURLを取得したです。
-
バージョンナンバーの取得
-
HPを作成しているのですが安価...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
Spreadの選択行の取得について
-
PHP8でWarning:Undefined varia...
-
Flexgridで選択行の列の値を取...
-
count(*)で取得した値をJAVAの...
-
VBA Shapesの座標からセル位置...
-
データ数をカウントしたいのですが
-
JavaScriptにおいてコンピュー...
-
利用者側のMACアドレスを取得し...
-
VBA リストボックス内の値を複...
-
like演算子内に変数って使えな...
-
EXCELのリストボックスを選択し...
-
「Excel VBA」 Webクエリ マク...
-
JavaScriptでWindowsログオンID...
-
gethostbyaddrでのホスト名取得...
-
現在時刻をミリ秒まで取得
-
vbaで、オートシェイプ文字幅と...
おすすめ情報