次のコードスニペット:
struct timespec ts;
for (int x = 0; x < 100000000; x++) {
timespec_get(&ts, TIME_UTC);
long cTime = (long) time(NULL);
if (cTime != ts.tv_sec && ts.tv_nsec < 3000000) {
printf("cTime: %ld\n", cTime);
printf("ts.tv_sec: %ld\n", ts.tv_sec);
printf("ts.tv_nsec: %ld\n", ts.tv_nsec);
}
}
この出力を生成します:
...
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2527419
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2534036
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2540359
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2547039
...
なぜ間の矛盾cTime
とts.tv_sec
?条件をに変更しても問題は発生しないことに注意してくださいts.tv_nsec >= 3000000
。この問題は、ナノ秒が3000000よりも小さいことに依存しています。
使用するオペレーティングシステム、そのバージョン、使用するCライブラリのバージョンについて、より具体的にする必要があります。
—
プログラマー
@Someprogrammerdude Linux Debian 8、GCC 6.3.0。
—
テオドール
なに
—
Marco Bonelli
timespec_get()
?これはCまたはC ++ですか?のように見えstd::timespec_get
ます。適切なタグを使用してください。
@MarcoBonelli:C11でCに追加されました。オンラインで再現できます。
—
ShadowRanger
@ShadowRangerは参考にしていただきありがとうございます。システムの
—
Marco Bonelli
man
エントリが見つからなかったtimespec_get
ため、結論にジャンプしました。理にかなっています。