以下代码段:
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。
—
Theo d'Or
什么
—
Marco Bonelli
timespec_get()
啊 这是C还是C ++?看起来像std::timespec_get
。请使用适当的标签。
@MarcoBonelli:它已添加到C11中的C中。可以在线复制。
—
ShadowRanger
@ShadowRanger感谢您的参考,我在系统上看不到该
—
Marco Bonelli
man
条目,timespec_get
因此我下结论了。说得通。