NOW関数で現在時刻(日付も)を取得し、その時間+1:30した値を作り、DO LOOPで、毎回現在時刻を取得して、IFで1:30プラスした値より大きくなるかを
判定してループをぬけるようにしています。勿論、DoEventsをかませております。これを7回ほど繰り返すプログラムを作って、テストを分単位で実施すると問題無く
動作するのに対し,だいたい1時間以上に設定すると、VB自体が”反応なし”になったり、Loopをぬけなかったり、正常に動かないことがあります。
目的としては、日をまたいだ、時間単位のタイマープログラムが作りたいのですが、CPUに負担が、かかりすぎていてVBの問題でないかもしれません。常駐プログラムや、スクリーンセーバー等は設定しておりませんが、どなたか、教えてください。
他にいいアイデアがあれば教えてください。 ちょーぶん すんまそ
タイマーコントールのイベント内で現在時間を取得して経過時間を判定すれば
いいのでは。
例えば1秒毎に現在時間を取得して経過時間を判定すれば、誤差は1秒以内に
なるし、ある時間までは1分毎に計測し1分前からはインターバルを早めれば
誤差も少なくなるかと思います。
Do Loopの中にSleep関数は入っていますか?
入っていなければ、Sleep関数を入れてみてください。
引数の値は数十ミリ秒で十分です。これだけで、CPU負荷が激減するはずです。
それから、Loopを抜けない場合があるとありますが、
If文の判定文はあっていますか?
あと、VB自体が反応なしになるとありますが、
どこかで永久ループになっていませんか?
DoEventsはループするたび必ず通る場所にかかれていますか?
もし差し支えないのでしたら、一度コードを載せてみるのも
いいかもしれません。的確な答えが返ってくるでしょうから。
そこに間違いがあれば、ですが。
みなさん、アドバイスありがとうございます。
いろいろかんがえてみました。
時間の精度はそれほど、問題はないのですが、確実に動くプログラムめざしていますので、問題点は、テストで、タイマー時間が短いと上手く行きやすく、長いとエラーすることがたびたび、あるということで、上手く行くことがない訳ではないので基本的な流れ等は、大丈夫だと思われるのですが、イレギュラーにエラーが起こることがあるということで、タイマー以外のところ、ある時間になったらGPIB制御で
測定器に設定を与え、測定させ結果を得た際、もしくは、その前に、なにかあるのかもしれないので、分割してもう一度よく,考えてみます。
ツイート | ![]() |