プロが教えるわが家の防犯対策術!

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件)

#1です。


2005のテスト環境が無いので記憶でですが下記コードになります。
Dim DM As DateTime
DM = DateTime.Now
そのままですと扱いしづらいとおもいますので
DM.ToString("t") '00:00
DM.ToString("T") '00:00:00
などで変更してください。   
    • good
    • 0

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でマルチメディアタイマーが使えるのなら
使い方を教えていただけますか。
すみませんがよろしくお願いします。

補足日時:2009/12/20 23:05
    • good
    • 0

こんにちは。


タイマーのインターバルの設定の場合PCの環境・状況により精度はあまりよくありません。
正確な時間を取得したいのであればタイマーイベント内でシステム時間を取得し処理をしたほうが精度は出ます。
その場合のインターバルは小さければ小さいほど精度は上がりますが負荷は上がりますので調整が必要です。

この回答への補足

返事遅くなりすみません。
欲しかった答えは、DreamyCatさんの内容だったのですが、
VBの場合、タイマーとして使うとすればタイマーイベント内でシステム時間の取得が、一番簡単にできそうなのですが
カテゴリーからの検索で調べ他のですが
分かり易い説明がありません。
分かり易く説明してもらえないでしょうか?
もしくは分かり易く説明をしているサイトを紹介して頂くだけでも
かまいません。
すみませんがよろしくお願いします。

補足日時:2009/12/20 22:07
    • good
    • 0

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