入力された時間を一秒ずつ Beep を鳴らしながらカウントしていくプログラムなんですが,走らせているうちにパソコンの時計がずれるんです.
(.frm)
For I = 0 to text1.text
Call Pause(1000)
Beep
Next I
(.bas)
Public Sub Pause(Pausetime as Long)
Call Sleep(1000)
DoEvents
End Sub
または,
Public Sub Pause(Pausetime as Long)
Dim Start as Double
Start = GetTickCount
Do While GetTickCount < Start + Pausetime
DoEvents
Loop
End Sub
これでなぜ時計がずれるんでしょう?
DoEventsのせいかな?でもDoEventsが無いと途中で止めれれないし...
参考までに
GetTickCount, timeGetTime等の精度について
http://www1.odn.ne.jp/synsyr/prog_t1.html
GetTickCountとtimeGetTimeによる時間測定
http://www.sm.rim.or.jp/~shishido/tick.html
上で説明している"時計"とは
タスクの中にある"時計"なんです.
右下にあるやつ
ずれるようならば、1000ミリ秒ごとではなく、
100ミリ秒ごと(くらい)に秒数を監視して、
100ミリ前の秒数と違ったらbeepにすれば?
こうすれば、VBについてるタイマーだけで、結構なことができるみたい。
とりあえずいろいろ試してみたところ
Beepを一秒毎に鳴らすことにより
時計が遅れるようです.
今回はそのBeepを鳴らさないようにしました.
ありがとうございましたm(_)m
ツイート | ![]() |