5分間隔や10分間隔で
あるプロシジャーを実行さしたいのですが
Timmerだと約一分強までの間隔しか設定できません
プロシジャーの中でfor文を適当に回して見ましたがうまくいきません
何か、よい方法が無いでしょうか
環境:VB6.0SP6 WIN2000 or WIN2003
実行予定日時を変数にセットしておいて、Timerイベントの中で現在時刻と
予定時刻を照合して処理実行するかどうかを判定すればいい話では?
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Dim Temp() As String
Dim startM As Long
Dim startS As Long
Dim StartH As Long
Dim EndH As Long
Dim EndM As Long
Dim EndT As String
Temp = Split(Format(Time, "h:m:s"), ":")
StartH = CLng(Temp(0))
startM = CLng(Temp(1))
startS = CLng(Temp(2))
If EndM >= 60 Then
EndM = startM + 10 - 60
EndH = StartH + 1
Else
EndM = startM + 10
EndH = StartH
End If
EndT = EndH & EndM & startS
Do Until Format(Time, "hms") = EndT
DoEvents
Sleep 100
Loop
MsgBox "10分経過", vbInformation
そんな難しく考えないでも・・・
10秒間隔とか、1分間隔で設定して、タイマーエベントの発生回数を
カウントし、所定回数カウントしたら当然、それだけの時間が経過して
いることになるので、行いたい処理を実行・・・とか。
要は5分間隔が欲しいなら、タイマーを1分にして、カウントした値を
5でMODしてあまりがゼロなら、処理続行・・・カウンタはゼロクリ
ダメでしょうか・・・
以上。
余りにもひどいサンプルなので二言
・日付の変わり目の直前に実行すると終了予定時刻が実際にはあり得ない
時刻になってしまうので永久ループになります
(時刻ではなく日時で終了予定を計算する)
・ループ内のDoEventsのイベント処理中に終了予定時刻を過ぎてしまうと
翌日までループが回り続けます
( = ではなく >= にする)
TimerとAPIのTimeGetTimeを組み合わせて、設定時間に近づくほど
Intervalを小さくしていって、最後の一秒くらいはLoopで回すと
かなり精度の高いタイマーが出来る。
まあこの質問者さんは、そんなに精度の高いタイマーは必要としない
様ですが、参考までに。
皆さん
ありがとうございました
無事できました
今後ともお願いします
ツイート | ![]() |