Windous95でVB6を使う超初心者です。何卒御教授下さい。
20msの間隔で精度良くイベントを指定回数(もしくは指定秒間)ループさせるにはどのようなステートメントをいれればいいのでしょうか?
NT系ならSetTimer(WM_TIMER)でも10msec程度の
精度を期待できますが、95系だと55msec程度ですし、
timeSetEventはVBで使うにはちょっとアレなので、
ループ内でGetTickCountかtimeGetTimeを見るぐらいしか
方法がないのでは?
GetTickCountは精度が13msec程度ですから、
高い精度が必要なら、精度がほぼ1msecのtimeGetTimeのほうがいいでしょう。
また、20msec間隔なら、
QueryPerformanceCounter,QueryPerformanceFrequencyを
使うまでもありませんが、
自作timerを作成するには?
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200411/04110025.txt
にも目を通しておいたほうがいいでしょう。
(win95ということですから注意しておきますが、
QueryPerformanceFrequencyはハードが対応している必要があります。
非常に古いマシンだと対応していないことがあります。)
VBではありませんが、ここにも目を通すといいかも。
GetTickCount, timeGetTime等の精度について
http://www.emit.jp/prog/prog_t1.html
>Sayさん
ご意見有難うございます。
申し訳ありませんが
>ループ内でGetTickCountかtimeGetTimeを見るぐらいしか方法がないのでは?
とはどういう意味でしょうか?
時間表示をできるようにしてループ処理中に自分の目で見るということですか?
低レベルな質問ですいません。
また、ループ処理はFor…Nextで回数を指定するようにすればいいのでしょうか?
また、sleep関数やlooptimeがありますが使えませんか?
>時間表示をできるようにしてループ処理中に自分の目で見るということですか?
20msec間隔で、目で経過時間チェックしながら
手作業で処理を行える自信があるなら、それもアリですが・・・(^_^;
ここでいう「見る」とは、関数の戻り値をチェックする、という意味です。
目でチェックする必要はありません。チェックするコードを書けば十分です。
>ループ処理はFor…Nextで回数を指定するようにすればいいのでしょうか?
予定時間が経過するまで、ループ内で経過時間をチェックします。
VBのFor文は不定回ループには不向きですからDo〜Loopのほうがいいでしょう。
>sleep関数やlooptimeがありますが使えませんか?
何かアイデアがあるのなら、人に聞く前にまず自分でやってみては?
>低レベルな質問ですいません。
APIがVBより低レベルにある以上、APIがらみの質問が低レベルになるのは必然です。
Win95 と言う環境と性能を考慮すると・・・
全てプログラム的に解決するよりは、一層のこと外部ハードに
頼られては?
インターフェース社のタイマカウンタボード+ドライバーで、
サイクリックなルーチン起動が可能になります。
ただ何にせよ気をついけないいけない点は、起動される処理が
秒オーダーの処理時間とならないことでしょう。言い換えれば
タイマー間隔が、20msなので、せめて数msでしょう・・・
そうしないと、CPU負荷が限りなく100%に近づきます。
尚、その処理内でのファイルへの出力等アクセスは、できない
ことはありませんが、行なうことによってのシステムダウンは
補償されませんので・・・
ご参考までに・・・
以上。
sayさん、岡田さん有難う御座いました。
これから色々と案を試してみたいと思いますので一応解決とさせていただきます。
完全に解決した場合は、また、書かせていただきます。
ツイート | ![]() |