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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

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

#1

投稿記事 by taketoshi » 12年前

こんにちは。

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

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

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

box
記事: 2002
登録日時: 13年前

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

#2

投稿記事 by box » 12年前

OSの機能を使えば実現できるのではないかと、勝手に思っています。
Windows:atコマンド
UNIX:cron
Mac OS:知りません
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

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

#3

投稿記事 by taketoshi » 12年前

Windowsなのでバッチファイルを記述してタスクスケジューラも効果的だなぁとは思っております。

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

アバター
lbfuvab
記事: 72
登録日時: 13年前

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

#4

投稿記事 by lbfuvab » 12年前

time関数で24*60*60毎に処理すれば良いんじゃないでしょうか?

コード:

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#5

投稿記事 by ISLe » 12年前

taketoshi さんが書きました:Windowsなのでバッチファイルを記述してタスクスケジューラも効果的だなぁとは思っております。

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

taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

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

#6

投稿記事 by taketoshi » 12年前

皆さんありがとう御座います。

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



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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#7

投稿記事 by ISLe » 12年前

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

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

taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

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

#8

投稿記事 by taketoshi » 12年前

ISLeさん、教えていただいてありがとうございます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る