はじめましてお世話になります
VB6.0を使用しています。
タイマーを使用し10秒単位でデータを計測するプログラムを作成したいのですが上手くいきません。
Private Sub Form_Load()
Dim T1 as String
Dim T2 as String
Timer1.interval = 1000
T1 = Now
T2 = Format$(T1, "yyyy/mm/dd 12:35:10")
End Sub
Private Sub Timer1_Timer()
T1 = Now
If StrComp(T1, T2, vbTextCompare) > 0 Then
Debug.Print "A"
'???
Else
Debug.Print "B"
End If
End Sub
???の場所に次の計測時間を求めたいのですがどのようにしたら良いか分かる方ご指導宜しくお願いします。
何をしているのかわかりませんが
Timer1.interval に値をいれれば
次も Timer1_Timerを実行できます。
上手くいかなり理由がたくさんありそうなのですが。
timer1.enabled=Trueになっておりますか?
10秒毎であれば'余り正確かは不明。
Dim i as integer
Private Sub Form_Load()
i=0
Timer1.interval = 1000
timer1.enabled=True
End Sub
Private Sub Timer1_Timer()
i=i+1
If i => 10 Then
Debug.Print "A"
'???
i=0
Else
Debug.Print "B"
End If
End Sub
返信ありがとうございます
質問の仕方が悪かったみたいですみません(__;
もし現在の時間が10時00分00秒なら次に計測するのは10時00分10秒その次は10時00分20秒といったように確実に10秒ごとに値を習得したいのです。
もしtimerのintervalを1000に設定し10回繰り返した時時間を計ってみると分かったのですが10秒や11秒と確実に10秒ざみになってるという保障がないのです。
それを防ぐために 現在の時間を習得しstrcompを使用し現在の時間と次の時間を比較し超えていれば値を表示し次の時間の値を計算したいのです。
タイマーは正確ではないので、多少ズレが生じてもおかしくないんです
Intervalを1000にすると約1秒毎にイベントが発生しますが、それを500にして約0.5秒おきにし、前回計測した時刻の秒と、現在の時刻の秒を照らし合わせ、10秒後になっていたら表示&前回時刻の秒=現在時刻の秒に修正という作業をすれば、ほぼ秒単位でのズレはなくなると思います
もっと細かくチェックしたければIntervalを300や200にして割り込み数を増やす
最終的にはタイマー割り込みを使わずにAPIのタイマーを使用すると、もっと正確になります・・・が、10秒単位なら必要なさそうですね
たびたびすみません
前回時刻の秒=現在時刻の秒という計算式が知りたいのですが
T1もT2もString型で定義しているためT2 = T2 + 10とするとエラーになってしまいます。
そこでreplace関数を使用しnowで習得した中身の数字以外の文字を""で表現してみました(2006/09/30 06:12:30→20060930061230みたいな感じです)
その値に+10をするとオーバーフローしてしまいました
string型にT1 = now T2 = format(T1, "yyyy/mm/dd h:nn:ss")としているとすればT2に10秒を足したい場合どのように表現すれば良いのでしょうか?
すみませんが宜しくお願いします
DataAddとか。
10秒単位という短い時間が連続するのであれば
あえて「タイマー」を使用せず、常に「ループ」した実装でも
よいのではないでしょうか。
(前回比較した時間と今回取得した時間を比較するやり方は
同じだとは思いますが)
もちろん「タイマー」を使用するということが要件となっているので
あれば無理ですが。
(CPU、メモリなどのリソースに負荷を極力かけたくないなど)
無事解決することができました。
DateAdd関数を使用し ???のところに T2 = DateAdd("s", 10, T2) としました。おかげで確実に10秒単位で処理ができるようになりました。
今までアドバイスをしてくださった方々本当にありがとうございました。
また分からない時があれば利用させて頂きます。
本当にありがとうございました。
ツイート | ![]() |