プロが教える店舗&オフィスのセキュリティ対策術

VB6で1日1回、決まった時間に処理をさせたい、という場合、どういう方法で行うのが一番いいのでしょうか。

私が現在やっている方法は、
1分ごとにタイマーイベントを発生させ、その中で、現在の日時が指定の時刻だったら処理を起動する、という仕組みです。
しかし、これでは負荷状況によってはタイマーのイベントや、以降の処理が待たされ、時刻の判定をするタイミングで、すでに目的の時刻を過ぎてしまっているということが考えられます。
タイマーイベントが9:59:59秒に発生し、現在時刻を取りに行ったら10:00:00秒になっていたというようなケースです。
時刻の判断は、hh:mmのフォーマットで比較しているので、分の単位が違えば条件に合致しなくなります。

誤差範囲を設け、「現在の時刻-30秒 < 指定時刻 <= 現在の時刻+30秒」のような条件にすれば、ある程度回避できますが、1分以上待たされるようなケースでは対応できません。

このような状況を回避するにはどうしたらいいでしょうか。
処理を起動する時刻が可変なので、Windowsのタスクなどは使えないです。
ATコマンドをうまく使えばできるのでしょうか。

よろしくお願いいたします。

A 回答 (3件)

タイマーの時間を1分以下にするという選択肢はないのでしょうか?



特定処理用に500msec程度の時間監視専用のタイマーを設置して、特定時間になったら関数をキックで良いと思うのですが。タイマーの中にそれほど多くの処理を入れない限りは、そう重くないと思いますし。

もし同じ時間内でイベントが何回も走ってしまうという事を懸念されているなら、最後に実行した日時を変数に保持しておいて、それと同一時刻なら実行しないというような処理を入れればいいと思います。この方法では駄目なのでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

他にも常駐処理がありまして、そちらが原因で重くなってるようです。スペックも貧弱な環境なので・・・。
なのでタイマー周期を短くするのはできれば避けたい方法です。

やはり最後の処理した日時から処理済み、未済みを判断するのが普通ですかね。
1日1回起動すればいいだけの処理なのにそのために常駐させるというのはなんだかなぁという気がするのですが・・・。


ありがとうございました。

お礼日時:2006/02/02 11:24

#2ですが、そのような場合ですと、やはり本日処理したか否かを別途に持って、他の処理が終わるのを待つしかないような気がしますが……。



とりあえずそのアプリが非常に重いアプリなので常駐させたくないという事であれば、例えば非常に小さな監視専用アプリ(時間がきたかどうかだけをチェックするアプリ)を別途に作って、時間がきたら元々のアプリをキックするような形にしてはどうでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

そうですね、もし今またつくり直すんだったら、おっしゃるとおりのやり方でやっただろうと思うのですが、すでに納入済みのシステムなので、今から構造を変えるのはちょっと不安です。
もともとのアプリは色んなタイミングで動く、色んな処理が詰め込まれているもので・・・

しかし自分が昔書いたコードって、大抵あとで見ると直したくなるものですね。

ありがとうございました。

お礼日時:2006/02/03 10:52

処理を実行したかどうかを持つしかない気がします。



例えば最後に処理を行った日を保持するなら「所定時刻<現在時刻、かつ今日はまだ処理が行われていない」なら・・・とみれますよね?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やはりそうするしかないですかね。
最後に処理した日時はファイルに保存しているので、やろうと思えばできるのですが、もっといい方法はないかと思いまして・・・。
客先の希望としては、定周期の監視をやめたいということだったので、それができればベストなんですが。


ありがとうございました。

お礼日時:2006/02/02 11:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!