ページ 11

24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月30日(土) 16:54
by taketoshi
こんにちは。

特定の時間に一日一度だけ、実行したい処理があるのですが記述方法で迷っています。
今考えているのは、タイマーを作成し、10分刻み位で現在時刻を監視しながら、
取得した時刻と設定時刻を比較し、合致すれば処理を実行、処理が被ってしまうので暫くはタイマーを呼び飛ばすフラグを設定するという風に考えています。

しかし、これではなんか冗長というか、他に何か良い方法はないかと思って質問させていただきます。
同様の処理を、こんな風に実装したとか。何か良い方法ありましたらご教授ください。

記述言語はC/C++です。

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月30日(土) 17:01
by box
OSの機能を使えば実現できるのではないかと、勝手に思っています。
Windows:atコマンド
UNIX:cron
Mac OS:知りません

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月30日(土) 19:56
by taketoshi
Windowsなのでバッチファイルを記述してタスクスケジューラも効果的だなぁとは思っております。

ですが、実行時間をアプリケーション側から簡単に制御出来るようにと考えています、

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月31日(日) 00:28
by lbfuvab
time関数で24*60*60毎に処理すれば良いんじゃないでしょうか?

コード:

while(1){
    Sleep(500);
    if(time(NULL) > LastExec + 24*60*60){
        LascExec = time(NULL);
        //処理
    }
}
みたいな

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月31日(日) 01:42
by ISLe
taketoshi さんが書きました:Windowsなのでバッチファイルを記述してタスクスケジューラも効果的だなぁとは思っております。

ですが、実行時間をアプリケーション側から簡単に制御出来るようにと考えています、
プログラムでタスクスケジューラアイテムを作成することができますよ。

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月31日(日) 14:14
by taketoshi
皆さんありがとう御座います。

lbfuvabさんの方法でテストプログラムを書いてみたところしっくりきたので、
マルチスレッドを実装して別スレッドで動かすようにして、このまま書き進めてみます。



>ISLeさん
そんなことも出来るんですね、APIがあるのでしょうか?
それともsystem関数からatコマンドでしょうか?

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年7月31日(日) 16:54
by ISLe
taketoshi さんが書きました:>ISLeさん
そんなことも出来るんですね、APIがあるのでしょうか?
ITaskSchedulerというCOMインターフェースを使って制御することができます。

(追記)
タスクスケジューラ(というかスケジューラサービス)を使うとスリープ状態からでも復帰して実行できますよ。

Re: 24時間で一回だけ実行させたい処理の記述方法

Posted: 2011年8月01日(月) 07:03
by taketoshi
ISLeさん、教えていただいてありがとうございます。

ITaskSchedulerをググって調べてみました。
サーバーに実装する予定なのでスリープ状態から復帰して実行するのは魅力的です。