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で質問しましょう!
似たような質問が見つかりました
- 洋画 映画「イコライザー1」で 2 2022/10/10 14:23
- その他(プログラミング・Web制作) ラダー図で0秒のタイマーが複数ある理由は何ですか? 1 2023/05/31 22:03
- 電車・路線・地下鉄 ITパスポート試験問題 7 2023/01/25 09:51
- 冷蔵庫・炊飯器 炊飯器のタイマー 7 2022/12/15 21:05
- iPhone(アイフォーン) iPhoneでタイマーのアプリを探しています。 iPhoneに元々入っているアプリだと 例えば85分 1 2023/06/17 13:58
- 特撮 シンウルトラマンの浅見弘子の初登場シーンで、なんで顔出しするのに、あんなに尺引っ張ったんでしょうか? 2 2023/02/03 00:59
- バイク免許・教習所 大型自動二輪教習、一本橋補習 指導員の方か、元指導員の方のみご回答下さい。よろしくお願いします。 一 7 2023/07/10 12:40
- Excel(エクセル) Excel 2019で質問があります。 計測器のデータをExcelで記録したんですが、1秒刻みで記録 4 2022/09/07 22:46
- 物理学 (1)秒針の角速度の大きさω(ω>0)を計算しなさい 単位はrad/s、πはそのまま残すこと (2) 3 2023/05/01 12:58
- その他(教育・科学・学問) A地点からB地点までの距離は16mで52秒で到着します。 その間30秒間隔でA地点からは製品が払い出 3 2023/08/19 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
vb.netで画面のコントロールId...
-
'ckbl' コントロールは作成され...
-
C#で角が丸いテキストボックス
-
コントロールを移動できない
-
VBAのエラーについて、”実行時...
-
With~EndWithの省略部分と引数...
-
ExcelVBAでListViewが使用できない
-
間違えて配置してしまったコン...
-
Labelコントロールの(左右)余...
-
VBAのフォームでTextBoxがいっ...
-
変数をコントロール型で使用す...
-
(VBA)スピンボタンの大量...
-
コントロール配列と同じような...
-
DataGridViewとSPREADの機能比較
-
VBAでドラッグ・アンド・ドロップ
-
Groupboxの配下のコントロール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報