引数にHHMMSS形式で時刻を渡し、
その時刻がきたら処理実行を繰り返し実行する
スケジュール実行のようなプログラム作成を試みています。
2回目の実行以降は1回目の実行から
60*60*12(24時間)sleepで可能と思いますが(ズレは置いておいて)、
初回実行の際に現時刻から指定時刻(HHMMSS)までsleepする差分時間を
求めたいのですが、time()等で得られる現時刻(YYYYHHMMDD)から指定時刻(HHMMSS)
の差(秒)を取得する良い方法はないでしょうか?
difftime()はtime_t形式で時刻の差分が取れるとのことですが
指定時刻をtime_t形式にする必要があり、他の方法がないかと思った次第です。
すみませんがアドバイスお願い致します。
時刻指定による繰り返し実行処理について
Re: 時刻指定による繰り返し実行処理について
なぜ指定時刻をtime_t形式にしてはいけないのでしょうか?
mktime関数で日時の情報が入ったtm構造体からtime_t型のデータを生成できます。
mktime関数で日時の情報が入ったtm構造体からtime_t型のデータを生成できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 時刻指定による繰り返し実行処理について
UNIX時間と日時のデータを相互変換する関数を自作すれば、glen さんが書きました:他の方法がないかと思った次第です。
time_t型の単位の環境依存を気にせずに済むので、いいと思います。
前に自分が作ったライブラリを置いておきます。
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 時刻指定による繰り返し実行処理について
回答ありがとうございます。
時刻情報(HHMMSS)に、日付情報等を付与して比較することに抵抗がありました。
日を跨ぐケースがある以上仕方ない事として理解しました。
本当はスケジュール実行できるような標準関数が用意されていれば
よいのですが、やはりsleep系でタイミングを取るしかないですかね。
時刻情報(HHMMSS)に、日付情報等を付与して比較することに抵抗がありました。
日を跨ぐケースがある以上仕方ない事として理解しました。
本当はスケジュール実行できるような標準関数が用意されていれば
よいのですが、やはりsleep系でタイミングを取るしかないですかね。
Re: 時刻指定による繰り返し実行処理について
次にx時y分z秒になるまでの時間を求めるだけなら、UNIX時間を使った複雑な計算をしなくても、glen さんが書きました:時刻情報(HHMMSS)に、日付情報等を付与して比較することに抵抗がありました。
日を跨ぐケースがある以上仕方ない事として理解しました。
素直に計算すれば求められると思います。
どの程度の精度が必要かにもよりますが、例えば1秒ずつsleepしつつ、現在時刻をチェックして、glen さんが書きました:本当はスケジュール実行できるような標準関数が用意されていれば
よいのですが、やはりsleep系でタイミングを取るしかないですかね。
「前回チェックした時に指定した時刻を越えていない」かつ「今回チェックした時に指定した時刻を越えている」ならば、
スケジュール実行したい処理を実行し、次に実行する時刻を1日後にずらす、という方法があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 時刻指定による繰り返し実行処理について
真偽はわかりませんが、ここによるとcron(dcron)もsleepを使用し、
ある間隔で時刻をチェックしてタスクを実行しているらしいです。
How do the internals of the cron daemon work? - Unix & Linux Stack Exchange
ある間隔で時刻をチェックしてタスクを実行しているらしいです。
How do the internals of the cron daemon work? - Unix & Linux Stack Exchange
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 時刻指定による繰り返し実行処理について
ありがとうございます。
時刻計算についてのご指摘はごもっともです申し訳ありません。
#このような箇所であまりstep数を増やしたくないという思いもありまして..
エラーが発生しない限り実行し続けるプログラムであるため、
少しずつだとしてもズレが発生しないようにはしたいところです。
時刻とsleep時間の整合性確認についても
1日単位での処理実行を目的としているため、確認頻度は抑えられるので
性能への影響もほとんどなく済みますので問題なさそうですね。
加えてループスレッドの終了処理も検討して実装してみます。
時刻計算についてのご指摘はごもっともです申し訳ありません。
#このような箇所であまりstep数を増やしたくないという思いもありまして..
エラーが発生しない限り実行し続けるプログラムであるため、
少しずつだとしてもズレが発生しないようにはしたいところです。
時刻とsleep時間の整合性確認についても
1日単位での処理実行を目的としているため、確認頻度は抑えられるので
性能への影響もほとんどなく済みますので問題なさそうですね。
加えてループスレッドの終了処理も検討して実装してみます。