• 締切済み

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のパソコンは、どう見ても内部精度は違うような結果に見えます。 どなたかタイマーの精度について知っておられる方、教えてもらえますか? よろしくお願いします。

みんなの回答

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.3

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

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答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毎に設定したい場合には マルチメディアタイマーを使うのが簡単です。

kou1012
質問者

補足

返事遅くなりすみません。 タイマーの時間についていろいろと教えて いただきありがとうございます。 インターバルの時間15.625msecだったのですね。 なかなか合うタイミングが無いわけでした。 正確に使う場合は、マルチメディアタイマーで検索しても Visual C#とかは出てきたのですが、VBでは出てこないところをみると avanzatoさんのタイマーイベント内でシステム時間を 使う方が有効そうですね。 もしVBでマルチメディアタイマーが使えるのなら 使い方を教えていただけますか。 すみませんがよろしくお願いします。

  • avanzato
  • ベストアンサー率54% (52/95)
回答No.1

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

kou1012
質問者

補足

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

関連するQ&A

  • 0.1msを計測できるタイマーを探しています

    0.1ms(1/10000秒)以下を計測できるようなストップウォッチ探しているのですが、なかなか見つかりません、どこか売っている場所を知ってましたら教えてください、お願いします。

  • エクセルVBAでタイマーコントロールは使えますか

    エクセルVBAでタイマーコントロールは使えますか。 エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。 無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、 一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間 連続で動作させることに不安を感じています。 この他に、VBのタイマーコントロールのような機能を持つオブジェクトや 便利機能等があったら教えていただけませんか。 (一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼 び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド 等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。 尚、私はWindowsMe+エクセル2000でVBAを作成しています。 実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい ます。

  • VB.netでタイマーがスタートしません

    VB.netでの質問です。serialportコントロールを使って232Cのデータを受信したらTimer1.Enabeled=Trueを実行するようにしているのですが、タイマーがスタートしません、何か、良い方法はありますでしょうか?

  • H8 3664 のタイマー

    こんにちは。皆さんに質問があります。 H8 3664F を使って、1/100秒の精度のストップウォッチを作っているところです。 標準で付いている32.768khzのクリスタルを使って、1秒、0.5秒 etc を作るところまでは出来たのですが、1/100秒が作り出せません。 自分はタイマーはAしか使ったことがない独学の初心者なのですが、どうすれば簡単に1/100秒(10ミリ秒)が作り出せるでしょうか? 1:16.12 (1分16秒12)という感じで表示したいです。 よろしくご教授お願いします。

  • VB2005のLABEL等のコントロールの表示速度がVB6時代よりかな

    VB2005のLABEL等のコントロールの表示速度がVB6時代よりかなり遅いように感じます。 実際遅いのですが、早くする方法はございますか? 例えば何もコードを書いていない新規フォームにLABELを80個ほど並べて実行しても LABELが右から左へぱらぱらと表示されますのでプログラムの影響ではないと思います。 表示は我慢するとして、タイマーで1秒周期でデータをファイルに書き込んでいるのですが表示が終わるまで タイマーイベントが待たされるようで、そのフォームの切り替えを何度か行うと1秒周期のデータ書き込みに に歯抜けがでる時がありこれが1番困っています。 改善策をご存知の方がいらっしゃいましたら宜しくお願いいたします。

  • VB6のForループ時間のマシン依存性

    VB6でハードウェア制御をしようとしています。 1mSのタイマーをForループで作りましたが、クロックの異なるマシンでは異なる時間に なってしまうのでしょうか? もしYesとすれば、マシンに依存しない方法をご教授ください。 私のレベルではTimerを使うくらいしか思いつかないのですが、VBのTimerは 誤差50mSぐらいで、高精度(10%ぐらい)の短時間タイマーは無理だと聞いているので あきらめました。 よろしくお願いします。

  • VB2008で

    VB2008で System.Threading.Thread.Sleepを使って5秒後にテキストボックスにaと表示させるプログラムを作ろうとしましたが、うまくいなないため、タイマーコントロールを使用したいと思ったのですが、どのようにしたらいいでしょうか?

  • タイマーの精度証明書(校正証明書)

    アプリ上のタイマー(ストップウォッチ)を検査した後、精度証明書(校正証明書)を発行可能でしょうか? 写真判定出来るアプリを見つけました。スタートの号砲と同時にタイマーが動き始めます。 このアプリを大会で使用したいのですが、定期的に検査をして精度が合っている事を証明する物が無いと大会記録として認められない様です。 1番はアプリの提供元が一緒に証明書も出してくれれば良いのですが、提供元が海外の方です。 精度を示す提供動画はあるのですが…

  • 車走行時のタイム計測について

    車走行時、スタート(現在地)からゴール(目的地)までのタイムを測れる物がほしいです。 コンマ00秒まで、尚且最大1時間以上の計測ができ、車に据え置き出来る(もしくは薄型で両面テープ等で貼り付けられる)、デジタル式でカッコイイ物が理想です。 ついてると嬉しいですが、ラップタイム計測はなくてOKです。 あくまでも通常のストップウォッチ機能があれば十分なので、 通常の小型デジタル時計にストップウォッチ機能があるものとか、 極端な話、上記の条件を満たしていれば、カウントアップ機能のついたキッチンタイマーでも大丈夫です(笑) ただし、走行時の操作を前提としているため、スタート・ストップボタンは押しやすい所についている必要があります。 自分でもいろいろ探して見たのですが、中々いい物が見つかりません。 何かオススメはないでしょうか? 又、iphoneのストップウォッチ、陸上競技で使うようなストップウォッチは無しでお願いします。

  • カウントアップを1秒毎に読み上げる音声タイマー

    カウントアップを1秒毎に読み上げてくれる音声タイマーを探しています。 具体的には、スタートボタンを押すと、 1秒、2秒、3秒 ・・・59秒、60秒、61秒・・・100秒・・・と 秒単位で読み上げてくれるタイマーはないでしょうか。 Microsoft Storeに「音声カウントタイマー」というWindows用のアプリがありましたが、このCountUpモードで読み上げる感じのものでいいのですが、分秒単位ではなく秒単位のみで読み上げてほしいです。 (〇) ・・・59秒、60秒・・・100秒・・・ (✖) ・・・59秒、1分・・・ 1分40秒・・・ 希望は、Windows用のフリーのソフトウェアですが、 なければ、iPhone用のフリーのアプリでもいいです。 ソフトウェア(アプリ)でなくても、ストップウォッチのように 製品(品物)の形のものでもいいです。 よろしくお願いします。