- 締切済み
VBのタイマーコントロールについて
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のパソコンは、どう見ても内部精度は違うような結果に見えます。 どなたかタイマーの精度について知っておられる方、教えてもらえますか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- avanzato
- ベストアンサー率54% (52/95)
#1です。 2005のテスト環境が無いので記憶でですが下記コードになります。 Dim DM As DateTime DM = DateTime.Now そのままですと扱いしづらいとおもいますので DM.ToString("t") '00:00 DM.ToString("T") '00:00:00 などで変更してください。
- DreamyCat
- ベストアンサー率56% (295/524)
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毎に設定したい場合には マルチメディアタイマーを使うのが簡単です。
- avanzato
- ベストアンサー率54% (52/95)
こんにちは。 タイマーのインターバルの設定の場合PCの環境・状況により精度はあまりよくありません。 正確な時間を取得したいのであればタイマーイベント内でシステム時間を取得し処理をしたほうが精度は出ます。 その場合のインターバルは小さければ小さいほど精度は上がりますが負荷は上がりますので調整が必要です。
補足
返事遅くなりすみません。 欲しかった答えは、DreamyCatさんの内容だったのですが、 VBの場合、タイマーとして使うとすればタイマーイベント内でシステム時間の取得が、一番簡単にできそうなのですが カテゴリーからの検索で調べ他のですが 分かり易い説明がありません。 分かり易く説明してもらえないでしょうか? もしくは分かり易く説明をしているサイトを紹介して頂くだけでも かまいません。 すみませんがよろしくお願いします。
補足
返事遅くなりすみません。 タイマーの時間についていろいろと教えて いただきありがとうございます。 インターバルの時間15.625msecだったのですね。 なかなか合うタイミングが無いわけでした。 正確に使う場合は、マルチメディアタイマーで検索しても Visual C#とかは出てきたのですが、VBでは出てこないところをみると avanzatoさんのタイマーイベント内でシステム時間を 使う方が有効そうですね。 もしVBでマルチメディアタイマーが使えるのなら 使い方を教えていただけますか。 すみませんがよろしくお願いします。