ตัวอย่างโค้ดต่อไปนี้:
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
timespec_get()
? นี่คือ C หรือ C ++ หรือไม่ std::timespec_get
ดูเหมือนว่า โปรดใช้แท็กที่เหมาะสม
man
รายการtimespec_get
ในระบบของฉันดังนั้นฉันจึงข้ามไปยังข้อสรุป มีเหตุผล.