VB2005のタイマーコントロールで疑問があります。
ピクチャーボックスコントロールにラベルを貼り付けて
タイマーコントロールで文字がスクロールする
プログラムを作ったのですが、
タイマーコントロールのインターバルを10msから120msまで
500回タイマーのイベントをカウントしたタイムとストップウォッチで
計ったタイムを比べたらズレが生じることが分かりました。
人間の手で計っていますが、計測方法としては、タイマーをスタートするボタンと同時にストップウォッチのスタートを押し、カウンターが500回で止まった時点でストップウォッチを止める方法でWindowXPでCPUがCore2 DuoのパソコンとWindowsMeでCPUがPentiumIIIのノートパソコンで下記のように計測しました。
WindowsXP
10ms…8秒24、20ms…15秒84、30ms…15秒82、40ms…24秒64、50ms…31秒60、60ms…31秒72、70ms…41秒21、80ms…47秒40、90ms…47秒32
後省略
WindowsMe
10ms…28秒25、20ms…28秒21、30ms…28秒10、40ms…28秒23、50ms…28秒28、60ms…57秒20、70ms…57秒43、以下ほぼ一緒なので省略110ms…56秒93でした。
その後、VBのヘルプの検索で、Windowsのタイマーの精度は55msとあるのを発見したのですが、WindowsMeのノートパソコンでは、55msの精度にあったデータが帰ってきたのですが、
WindowsXPのパソコンは、どう見ても内部精度は違うような結果に見えます。
どなたかタイマーの精度について知っておられる方、教えてもらえますか?
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#1です。
2005のテスト環境が無いので記憶でですが下記コードになります。
Dim DM As DateTime
DM = DateTime.Now
そのままですと扱いしづらいとおもいますので
DM.ToString("t") '00:00
DM.ToString("T") '00:00:00
などで変更してください。
No.2
- 回答日時:
XPでは1000msを64分周した値15.625が基本になっています。
測定値と比べると合わないように見える部分がありますが
合わないのではなく、カウントの開始位置が15.625の途中であったため
その分だけ誤差になって見えることが原因です。
それと、たまたま測定中にWindowsが裏で動作して1回のカウントにかかる時間が15.625msより長くなってしまうことがあるのが原因です。
設定したインターバルの値は
実際にはおよそ下表の左数値くらいのとびとびの値になります。
interval・・500回の繰り返しにかかる計算上の秒数
15.6未満 ・・7.81 秒
31.3未満 ・・15.63
46.9未満 ・・23.44
62.5未満・・31.25
78.1未満 ・・39.06
93.8未満 ・・46.88
109.4未満 ・・54.69
125.0未満 ・・62.50
140.6未満 ・・70.31
156.3未満 ・・78.13
1ms毎に設定したい場合には
マルチメディアタイマーを使うのが簡単です。
この回答への補足
返事遅くなりすみません。
タイマーの時間についていろいろと教えて
いただきありがとうございます。
インターバルの時間15.625msecだったのですね。
なかなか合うタイミングが無いわけでした。
正確に使う場合は、マルチメディアタイマーで検索しても
Visual C#とかは出てきたのですが、VBでは出てこないところをみると
avanzatoさんのタイマーイベント内でシステム時間を
使う方が有効そうですね。
もしVBでマルチメディアタイマーが使えるのなら
使い方を教えていただけますか。
すみませんがよろしくお願いします。
No.1
- 回答日時:
こんにちは。
タイマーのインターバルの設定の場合PCの環境・状況により精度はあまりよくありません。
正確な時間を取得したいのであればタイマーイベント内でシステム時間を取得し処理をしたほうが精度は出ます。
その場合のインターバルは小さければ小さいほど精度は上がりますが負荷は上がりますので調整が必要です。
この回答への補足
返事遅くなりすみません。
欲しかった答えは、DreamyCatさんの内容だったのですが、
VBの場合、タイマーとして使うとすればタイマーイベント内でシステム時間の取得が、一番簡単にできそうなのですが
カテゴリーからの検索で調べ他のですが
分かり易い説明がありません。
分かり易く説明してもらえないでしょうか?
もしくは分かり易く説明をしているサイトを紹介して頂くだけでも
かまいません。
すみませんがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでオプションボタン...
-
エクセル・VBA CheckBoxのオブ...
-
コンボボックスの文字によるif...
-
VBAのエラーについて、”実行時...
-
vb.netで画面のコントロールId...
-
'ckbl' コントロールは作成され...
-
VBA ユーザーフォームの Keypre...
-
WIN32でOCXを利用する方法を教...
-
EXCELでactivexコントロールを...
-
VB6でシリアルポートの制御
-
VB.NET開発。ラジオボタンとコ...
-
Labelコントロールの(左右)余...
-
ACCESS2010のVBAでフォーム内ク...
-
ExcelにてListviewが表示できない
-
変数をコントロール型で使用す...
-
フォーム上の現在アクティブな...
-
Groupboxの配下のコントロール...
-
なかなか、Zオーダーが理解で...
-
(VBA)スピンボタンの大量...
-
コントロールを移動できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
エクセルVBAでオプションボタン...
-
vb.netで画面のコントロールId...
-
ExcelVBAでListViewが使用できない
-
EXCELでactivexコントロールを...
-
コントロールを移動できない
-
フォーム上の現在アクティブな...
-
ユーザーフォームで動的(Me.Con...
-
ListViewのチェックボックスに...
-
C#で角が丸いテキストボックス
-
エクセル コントロールツール...
-
VBAのフォームでTextBoxがいっ...
-
Excel VBA で Richtextboxを使...
-
VBA ユーザーフォームの Keypre...
-
Groupboxの配下のコントロール...
-
ACCESS2010のVBAでフォーム内ク...
-
chr関数の呼び出しで「プロ...
-
vba dbcommand button activex ...
-
With~EndWithの省略部分と引数...
おすすめ情報