時刻指定による繰り返し実行処理について

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

時刻指定による繰り返し実行処理について

#1

投稿記事 by glen » 12年前

引数にHHMMSS形式で時刻を渡し、
その時刻がきたら処理実行を繰り返し実行する
スケジュール実行のようなプログラム作成を試みています。

2回目の実行以降は1回目の実行から
60*60*12(24時間)sleepで可能と思いますが(ズレは置いておいて)、
初回実行の際に現時刻から指定時刻(HHMMSS)までsleepする差分時間を
求めたいのですが、time()等で得られる現時刻(YYYYHHMMDD)から指定時刻(HHMMSS)
の差(秒)を取得する良い方法はないでしょうか?

difftime()はtime_t形式で時刻の差分が取れるとのことですが
指定時刻をtime_t形式にする必要があり、他の方法がないかと思った次第です。

すみませんがアドバイスお願い致します。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 時刻指定による繰り返し実行処理について

#2

投稿記事 by みけCAT » 12年前

なぜ指定時刻をtime_t形式にしてはいけないのでしょうか?
mktime関数で日時の情報が入ったtm構造体からtime_t型のデータを生成できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 時刻指定による繰り返し実行処理について

#3

投稿記事 by みけCAT » 12年前

glen さんが書きました:他の方法がないかと思った次第です。
UNIX時間と日時のデータを相互変換する関数を自作すれば、
time_t型の単位の環境依存を気にせずに済むので、いいと思います。

前に自分が作ったライブラリを置いておきます。
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

glen
記事: 3
登録日時: 12年前

Re: 時刻指定による繰り返し実行処理について

#4

投稿記事 by glen » 12年前

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

時刻情報(HHMMSS)に、日付情報等を付与して比較することに抵抗がありました。
日を跨ぐケースがある以上仕方ない事として理解しました。

本当はスケジュール実行できるような標準関数が用意されていれば
よいのですが、やはりsleep系でタイミングを取るしかないですかね。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 時刻指定による繰り返し実行処理について

#5

投稿記事 by みけCAT » 12年前

glen さんが書きました:時刻情報(HHMMSS)に、日付情報等を付与して比較することに抵抗がありました。
日を跨ぐケースがある以上仕方ない事として理解しました。
次にx時y分z秒になるまでの時間を求めるだけなら、UNIX時間を使った複雑な計算をしなくても、
素直に計算すれば求められると思います。
glen さんが書きました:本当はスケジュール実行できるような標準関数が用意されていれば
よいのですが、やはりsleep系でタイミングを取るしかないですかね。
どの程度の精度が必要かにもよりますが、例えば1秒ずつsleepしつつ、現在時刻をチェックして、
「前回チェックした時に指定した時刻を越えていない」かつ「今回チェックした時に指定した時刻を越えている」ならば、
スケジュール実行したい処理を実行し、次に実行する時刻を1日後にずらす、という方法があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 時刻指定による繰り返し実行処理について

#6

投稿記事 by みけCAT » 12年前

真偽はわかりませんが、ここによるとcron(dcron)もsleepを使用し、
ある間隔で時刻をチェックしてタスクを実行しているらしいです。
How do the internals of the cron daemon work? - Unix & Linux Stack Exchange
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

glen
記事: 3
登録日時: 12年前

Re: 時刻指定による繰り返し実行処理について

#7

投稿記事 by glen » 12年前

ありがとうございます。

時刻計算についてのご指摘はごもっともです申し訳ありません。
#このような箇所であまりstep数を増やしたくないという思いもありまして..

エラーが発生しない限り実行し続けるプログラムであるため、
少しずつだとしてもズレが発生しないようにはしたいところです。
時刻とsleep時間の整合性確認についても
1日単位での処理実行を目的としているため、確認頻度は抑えられるので
性能への影響もほとんどなく済みますので問題なさそうですね。
加えてループスレッドの終了処理も検討して実装してみます。

閉鎖

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