Timerコントロールを使わずに、時間で動作するプログラムを作るには?


ぐーり  2001-08-21 02:10:11  No: 74767

Timerコントロールを使わずに、OSの時間で動作する(タスクスケジューラのような感じで、何時何分になったらメッセージボックスを表示するといったような)プログラムを作成したいのですが、何かヒント等ご存知の方いらっしゃいましたら、教えてください。


α  2001-08-21 02:24:43  No: 74768

Onキーワードの時間関係で確かあったと思います。
指定の時間になると割り込みをします。


たかみちえ  2001-08-21 07:40:34  No: 74769

Loadイベントとかで、無限ループを作って、そこで実行するのもいいですね、
Do
    i=GetTickTime'システムでの起動からのミリ秒を得る
    DoEvents
    if i mod 1000 =0 then'1秒ごと(起動してからのミリ秒が1000で割り切れる数だったら)に実行
        ’ここにステートメントをいれる
    End if
Loop
"理論上は"動くはずです^^;


こころ  URL  2001-08-21 09:38:09  No: 74770

GetTickTimeはGetTickCountでしょうか。
GetTickCountは精度が低いので
よほどCPUパワーがないと、if i mod 1000 =0 thenでは
一度も動作しないでしょう。
(DoEventsを毎回、1ミリ秒以下で処理しなければならないため)
timeGetTimeを使用しても厳しいと思います。

上記の例で行くと
i = GetTickCount + 1000
Do
    DoEvents
    If GetTickCount() > i Then
        '1秒ごとの処理

        i = GetTickCount + 1000    ' 更新
    End If
Loop
の方が、確実に処理を行うことができるでしょう。
でも、DoEventsではCPUをガシガシ使ってしまうので
質問のように、数分、数十分に一回行うような処理には
あまり向かないような気がします。


ぐーり  2001-08-21 10:51:06  No: 74771

αさん、たかみちえさん、こころさん、回答ありがとうございます。
今回私が考案してるプログラムはサーバで常時起動させておくものなので、こころさんからコメント頂いていたように、GetTickTimeを使用したプログラムは今回は向いてないみたいです。(すみません、説明不足でした)
αさんが書かれていた、時間指定で割り込み動作を行う方法は、どういったものなのか、詳しくご存知でしたら、教えていただきたいです。度々申し訳ないのですがよろしくお願いします。


Say  2001-08-21 18:29:05  No: 74772

APIならSetTimerかtimeSetEventでしょう。
ただし、コールバック関数の知識が必要です。


α  2001-08-24 01:56:58  No: 74773

ごめんなさい。On系で時間を扱うのは別のBasicでした。
混乱させてしまってすみません。


たかみちえ  2001-08-24 02:19:25  No: 74774

結局タイマーコントロールを使うので、本題とはちょっとちがいますけど…。
Timerのインターバルを、目的の10分の1くらいにして、
GetTick関係のAPIとくみ合わせれば、
まあ、ふつう人にはばれないくらいの精度のタイマーが出来ます^^;
まあ、さすがにパソコンが異常に遅いときにはばれますが…。
そのときは、他のどうさにあわせて遅れてくれるので、
かえって正確なのよりいいんじゃないでしょうか?

  サブクラスとか使ったりすると、エラーが起こるたびにVBが落ちるのでシステムタイマーはつかいません。
(でも、システムタイマーって強制終了するような処理したっけ…)
というより、単にメンドウなので^^;


ぐーり  2001-08-29 00:59:14  No: 74775

皆様、回答ありがとうございました!
ひとまず、Sayさんに教えていただいた、settimer、timeSetEventのAPIでの実現を考えてみます。
他にももしあれば、回答いただけるとありがたいです。


Say  2001-08-29 09:16:31  No: 74776

SetTimerは設定は楽ですがシステムに戻らない処理が続くと遅延します。そういう意味で、より正確なtimeSetEventのほうをお勧めします。Game系のPageなんかによく使用例がのってます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加