- 论坛徽章:
- 0
|
见下面所示是个获取未来某一时刻的函数。但我有几点疑问
1.clock_gettime调用失败时为什么要用:“tp->tv_sec = time(NULL) + 1”而不是“tp->tv_sec = time(NULL)”
2.clock_gettime调用成功时为什么要做判断“if ((int)(tp->tv_sec - t) > 30)”,time函数获取的时间和 clock_gettime获取的时间不可能有个30S的误差吧。
求赐教
static inline void getTimespec(int wait_ms, struct timespec *tp)
{
time_t sec, t;
long long nsec;
sec = 0;
if (wait_ms == NO_WAIT)
{
nsec = 0;
}
else
{
nsec = wait_ms * 1000000LL;
}
if (clock_gettime(CLOCK_REALTIME, tp) == -1)
{
PRINT("getTimespec: clock_gettime call fail, error %d(%s)\n", errno, strerror(errno));
tp->tv_sec = time(NULL) + 1;
tp->tv_nsec = 0;
}
else
{
t = time(NULL) + 1;
if ((int)(tp->tv_sec - t) > 30)
{
tp->tv_sec = t;
tp->tv_nsec = 0;
}
}
nsec += tp->tv_nsec;
PRINT("getTimespec: current time sec = %ld, time = %ld, nsec = %ld, total nsec = %lld\n",
tp->tv_sec, time(NULL)+1, tp->tv_nsec, nsec);
if (nsec >= 1000000000)
{
sec = nsec / 1000000000;
nsec = nsec % 1000000000;
}
tp->tv_sec += sec;
tp->tv_nsec = nsec;
PRINT("getTimespec: after time sec = %ld, time = %ld, nsec = %ld\n",
tp->tv_sec, time(NULL)+1, tp->tv_nsec);
return; |
|