- 論壇徽章:
- 0
|
見下面所示是個獲取未來某一時刻的函數(shù)。但我有幾點(diǎn)疑問
1.clock_gettime調(diào)用失敗時為什么要用:“tp->tv_sec = time(NULL) + 1”而不是“tp->tv_sec = time(NULL)”
2.clock_gettime調(diào)用成功時為什么要做判斷“if ((int)(tp->tv_sec - t) > 30)”,time函數(shù)獲取的時間和 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; |
|