私はclock_gettime()
コマンドを使用し、そこから取得したtimespec
に一定のミリ秒を追加しようとしています。私はちょうどこれをすることはできますかtimespecは、tv_nsecフィールドに1秒以上のナノ秒を持つことができますか?
//milli is an int that can be any number (within reason)
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_nesc += (milli*1000000);
または私はそれを分割し、任意の全体秒は最初があるかどうかを調べる、tv_sec
フィールドにそれらを追加し、tv_nsec
に残りを追加する必要がありますか?
tv_nsec
フィールドは、1秒間に1ナノ秒以上保存できますか?
+1。しかし、それを説明する価値はあります。完全にPOSIX/Cポータブルにしたい場合は、追加などの前にオーバーフローをチェックする必要がありますが、これは楽しいことではありません。すべての実用的なPOSIXプラットフォームで作業したいだけで、非正規化されたtimespecや1G以上のnanosを追加していない場合は、 'long'がどのように動作するかについての通常の仮定をすることができます。 linuxだけを気にしているなら 'timespec_add_safe' /' timespec_add'や 'set_normalized_timespec'を使うことができます。 – abarnert
@Keith Thompson私はposix stdへのあなたのリンクに従ってきました。あなたが話しているPOSIX保証がclock_settime()のために定義されているように見えます。 msgstr "clock_settime()関数は次の場合に失敗します:"、。それとも私は何かが恋しい?実際に私はそのような保護者に興味があるので! :-) –
@yvesBaumes:私はちょうど私の答えを少しきれいにしました。あなたは何の保証をしていますか? –