■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
|
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った): |
■ ページの共有: |
[ サイト内検索 ]
![]()
カスタム検索
|
#39907-0Timerを確実に動かすKEI2001-03-07(水) 00:23
#39908-0RE#39907:Timerを確実に動かすおぎ2001-03-07(水) 00:45
#39910-0RE#39908:Timerを確実に動かすKEI2001-03-07(水) 02:37
#39924-0RE#39910:Timerを確実に動かすろってんまいあ2001-03-07(水) 09:47
#39941-0RE#39924:Timerを確実に動かすKEI2001-03-07(水) 12:19
#39942-0RE#39907:Timerを確実に動かすtani2001-03-07(水) 12:42
#39943-0RE#39941:Timerを確実に動かすろってんまいあ2001-03-07(水) 12:43
#39908-0RE#39907:Timerを確実に動かすおぎ2001-03-07(水) 00:45
#39910-0RE#39908:Timerを確実に動かすKEI2001-03-07(水) 02:37
#39924-0RE#39910:Timerを確実に動かすろってんまいあ2001-03-07(水) 09:47
#39941-0RE#39924:Timerを確実に動かすKEI2001-03-07(水) 12:19
#39942-0RE#39907:Timerを確実に動かすtani2001-03-07(水) 12:42
#39943-0RE#39941:Timerを確実に動かすろってんまいあ2001-03-07(水) 12:43
初めまして。初心者の悩みにお答えいただけたら、幸いです。 Timerを確実に決めたIntervalで動かすにはどうすれば良いのでしょう? Intervalを短くすればするほど、ズレが大きくなる感じです(体感的に)。 Intervalを出来れば100、長くても2000で確実に動かしたいと思っています。 どなたか御わかりになるかがいらっしゃいましたら、お答えいただけないでしょうか?
おぎ2001-03-07(水) 00:45
うーん。タイマーを使って一定時間ごとにシステム時間(?パソコンの時間) を取得すればいいんじゃないかと思いますが・・・。 違ってたらごめんなさい。(^^;
>一定時間ごとにシステム時間を取得すればいいんじゃないかと・・・ おぎさん、早速のレスありがとうございます。 確かに、それも考えたのですが・・・。 やりたいことはSliderを1秒なり、0.1秒なりの単位で確実に動かすことです。 システム時間と、このことを連結させる方法が思いつきませんで。 「システム時間(パソコンの時計)が1秒進んだら・・・」ということは可能でしょうか? せっかくのお答えに、さらに質問を返して申し訳ありません。
ろってんまいあ2001-03-07(水) 09:47
> >一定時間ごとにシステム時間を取得すればいいんじゃないかと・・・ > > おぎさん、早速のレスありがとうございます。 > > 確かに、それも考えたのですが・・・。 > やりたいことはSliderを1秒なり、0.1秒なりの単位で確実に動かすことです。 > システム時間と、このことを連結させる方法が思いつきませんで。 > 「システム時間(パソコンの時計)が1秒進んだら・・・」ということは可能でしょうか? > > せっかくのお答えに、さらに質問を返して申し訳ありません。 タイマーイベントは、前回のタイマーイベントの終了から Interval プロパティ値の経過後に 次のイベントが発生します。 つまり、Interval = 1500 のタイマーコントロールの、Timer イベントに 700ms の処理を 記述すると、約2200ms おきにイベントが発生します。 もし処理時間が、500〜1000ms で不規則であるならば、2000〜2500msおきに発生します。 ですので、正確な時間間隔で処理したいのならば、Interval プロパティ値を小さくし、前回の 処理時間からの経過時間を過ぎていたら処理を実行するという手法が必要です。
> 正確な時間間隔で処理したいのならば、Interval プロパティ値を小さくし、前回の > 処理時間からの経過時間を過ぎていたら処理を実行するという手法が必要です。 ろってんまいあさん、レス有り難うございます。 なるほど、Timerがずれてくる理由がよく分かりました。 しかし、上記の手法はどのように行えば良いのでしょう? ヒントだけでも、御教授願えないでしょうか? 初心者ゆえ、度重なる質問をご容赦ください。
tani2001-03-07(水) 12:42
tani です。 > Timerを確実に決めたIntervalで動かすにはどうすれば良いのでしょう? 「Timerを確実に動かす」というのとは違ってしまいますが、 逆に、処理から処理までの時間を、指定の時間まで止めてしまってはどうでしょう。 timeGetTime API 関数(Windows 起動からの経過時間を取得)を使用して以下のようにすると、 「処理」とかかれた処理が終了すると、指定の時間間隔まで待っていて、 次のループに移るというようになっています。 Dim NextTime As Long Dim lnCnt As Long For lnCnt = 1 To 10 NextTime = timeGetTime() + 100 ' 1ループ100ミリ秒 ' 処理 ・・・ ' NextTime の時間になるまで待機 Do DoEvents Loop While timeGetTime < NextTime Next lnCnt
ろってんまいあ2001-03-07(水) 12:43
> なるほど、Timerがずれてくる理由がよく分かりました。 > しかし、上記の手法はどのように行えば良いのでしょう? > ヒントだけでも、御教授願えないでしょうか? > > 初心者ゆえ、度重なる質問をご容赦ください。 あくまでも一例です。 Private Sub Form_Load() ' インターバル値設定 ' 例えば、Interval=300 なら理論最大300ms の誤差となる ' 小さくしすぎると誤差は小さくなるが、遅いマシンでの負荷が上がる Timer1.Interval = 300 End Sub Private Sub Timer1_Timer() Static LastTime As Date Dim NowTime As Date NowTime = Now If Second(NowTime) = 0 Or DateDiff("s", LastTime, NowTime) > 60 Then ' 秒がゼロ又は、前回の実行時から60秒以上経過していたら実行 Call SubProc LastTime = NowTime End If End Sub
このページと関連する記事:
#18018-0次回からは表示させない・・2001-09-27(木) 16:48#33233-0タイマー機能2000-11-10(金) 00:33
#17890-0Timerを使ったTime表示2001-09-19(水) 15:50
#13181-0時計が遅れてくる。2000-12-05(火) 09:14
#27573-0タイマー処理2000-08-08(火) 13:54
#32045-0時間制御について2000-10-19(木) 18:22
#441-1タイマーコントロール以外の時間の取得方法2002-08-23(金) 23:34
#13392-0ストップウオッチ2000-12-13(水) 01:39
#599-2Timer関数について2003-12-25(木) 14:02
#25054-0timerで1分以上・・・2001-12-03(月) 17:03