VB6で1日1回、決まった時間に処理をさせたい、という場合、どういう方法で行うのが一番いいのでしょうか。
私が現在やっている方法は、
1分ごとにタイマーイベントを発生させ、その中で、現在の日時が指定の時刻だったら処理を起動する、という仕組みです。
しかし、これでは負荷状況によってはタイマーのイベントや、以降の処理が待たされ、時刻の判定をするタイミングで、すでに目的の時刻を過ぎてしまっているということが考えられます。
タイマーイベントが9:59:59秒に発生し、現在時刻を取りに行ったら10:00:00秒になっていたというようなケースです。
時刻の判断は、hh:mmのフォーマットで比較しているので、分の単位が違えば条件に合致しなくなります。
誤差範囲を設け、「現在の時刻-30秒 < 指定時刻 <= 現在の時刻+30秒」のような条件にすれば、ある程度回避できますが、1分以上待たされるようなケースでは対応できません。
このような状況を回避するにはどうしたらいいでしょうか。
処理を起動する時刻が可変なので、Windowsのタスクなどは使えないです。
ATコマンドをうまく使えばできるのでしょうか。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
タイマーの時間を1分以下にするという選択肢はないのでしょうか?
特定処理用に500msec程度の時間監視専用のタイマーを設置して、特定時間になったら関数をキックで良いと思うのですが。タイマーの中にそれほど多くの処理を入れない限りは、そう重くないと思いますし。
もし同じ時間内でイベントが何回も走ってしまうという事を懸念されているなら、最後に実行した日時を変数に保持しておいて、それと同一時刻なら実行しないというような処理を入れればいいと思います。この方法では駄目なのでしょうか?
回答ありがとうございます。
他にも常駐処理がありまして、そちらが原因で重くなってるようです。スペックも貧弱な環境なので・・・。
なのでタイマー周期を短くするのはできれば避けたい方法です。
やはり最後の処理した日時から処理済み、未済みを判断するのが普通ですかね。
1日1回起動すればいいだけの処理なのにそのために常駐させるというのはなんだかなぁという気がするのですが・・・。
ありがとうございました。
No.3
- 回答日時:
#2ですが、そのような場合ですと、やはり本日処理したか否かを別途に持って、他の処理が終わるのを待つしかないような気がしますが……。
とりあえずそのアプリが非常に重いアプリなので常駐させたくないという事であれば、例えば非常に小さな監視専用アプリ(時間がきたかどうかだけをチェックするアプリ)を別途に作って、時間がきたら元々のアプリをキックするような形にしてはどうでしょうか?
ありがとうございます。
そうですね、もし今またつくり直すんだったら、おっしゃるとおりのやり方でやっただろうと思うのですが、すでに納入済みのシステムなので、今から構造を変えるのはちょっと不安です。
もともとのアプリは色んなタイミングで動く、色んな処理が詰め込まれているもので・・・
しかし自分が昔書いたコードって、大抵あとで見ると直したくなるものですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) bashで15分前と現在のエポックタイムの時間を取得したい 2 2023/02/01 19:10
- 時計・電卓・電子辞書 ソーラー腕時計の自動時刻合わせが、いつもずれてしまう 7 2022/12/04 10:36
- Android(アンドロイド) Androidスマホの時刻の自動同期の頻度を短くしたい 4 2022/12/02 17:29
- 時計・電卓・電子辞書 深夜になると自動時刻合わせがあり、その状態を針が止まる事で伝える電波掛時計があります。 自動時刻合わ 1 2022/03/27 01:37
- エアコン・クーラー・冷暖房機 日立のエアコンのリモコン 5 2023/04/01 00:25
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- 仕事術・業務効率化 IF関数で時間指定をして、数値を切り上げたいです 1 2022/05/01 23:37
- Visual Basic(VBA) エクセル マクロ 指定日の指定時刻にプロシージャを実行 4 2022/04/17 16:44
- Excel(エクセル) 出退勤管理の遅刻・早退時間について 3 2023/08/10 15:33
- その他(ネットショッピング・通販・ECサイト) 初期不良の対応について 5 2023/07/21 19:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どう増強すべきか
-
シェルスクリプトでファイル内...
-
iPhoneのニューラルエンジンっ...
-
Functionで戻り値を複数返す方法
-
private subモジュールを他のモ...
-
VCでビープ音を鳴らし続ける
-
フォルダのアクセス権確認について
-
VBA Column型は存在しないの?
-
StatusStripの表示が更新されな...
-
エクセル画面のちらつきなくす...
-
エクセルVBAでプロシージャ名を...
-
特定の名前のオートシェイプの...
-
マクロで、次のコードへ行く前...
-
特定のファイルを他のプロセス...
-
VBAでのマクロ実行中のオーバー...
-
ExcelのVBAで、選択したファイ...
-
【VBA】エラー処理で別プロシー...
-
ASP.NETで特定のページだけ文字...
-
For ~ Next文
-
時間間隔の計算方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
シグナル 6(SIGABRT)とは?
-
Functionで戻り値を複数返す方法
-
特定の名前のオートシェイプの...
-
ExcelのVBAで、選択したファイ...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
VBA 複数の行を高速で削除する...
-
Excel VBA セルの名前があるか...
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
シェルスクリプトでファイル内...
-
【Vb.net】プリンタジョブの取得
-
vbaのエラー対応(実行時エラー...
-
VBAでBook読み込み時の非表示方...
おすすめ情報