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


ぐーり  2001-08-20 17:10:11  No: 74767  IP: [192.*.*.*]

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

編集 削除
α  2001-08-20 17:24:43  No: 74768  IP: [192.*.*.*]

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

編集 削除
たかみちえ  2001-08-20 22:40:34  No: 74769  IP: [192.*.*.*]

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

編集 削除
こころ  URL  2001-08-21 00:38:09  No: 74770  IP: [192.*.*.*]

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 01:51:06  No: 74771  IP: [192.*.*.*]

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

編集 削除
Say  2001-08-21 09:29:05  No: 74772  IP: [192.*.*.*]

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

編集 削除
α  2001-08-23 16:56:58  No: 74773  IP: [192.*.*.*]

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

編集 削除
たかみちえ  2001-08-23 17:19:25  No: 74774  IP: [192.*.*.*]

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

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

編集 削除
ぐーり  2001-08-28 15:59:14  No: 74775  IP: [192.*.*.*]

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

編集 削除
Say  2001-08-29 00:16:31  No: 74776  IP: [192.*.*.*]

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

編集 削除