다음 코드 스 니펫 :
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
. 이 문제는 3 초보다 작은 나노초에 의존합니다.
사용 된 운영 체제, 버전, 사용 된 C 라이브러리 버전에 대해 더 구체적이어야합니다.
—
일부 프로그래머 친구
@Someprogrammerdude Linux 데비안 8, GCC 6.3.0.
—
Theo d' Or
무엇입니까
—
마르코 보 넬리
timespec_get()
? 이 C 또는 C ++입니까? 처럼 보입니다 std::timespec_get
. 적절한 태그를 사용하십시오.
@MarcoBonelli : C11에서 C에 추가되었습니다. 온라인으로 재생할 수 있습니다 .
—
ShadowRanger
@ShadowRanger 참조 해 주셔서 감사합니다. 시스템에 대한
—
마르코 보 넬리
man
항목을 볼 수 없으므로 timespec_get
결론에 도달했습니다. 맞는 말이다.