Chinaunix

标题: 一个精确获取未来某时刻的函数的疑问 [打印本页]

作者: hededisanan00    时间: 2013-01-17 14:30
标题: 一个精确获取未来某时刻的函数的疑问
见下面所示是个获取未来某一时刻的函数。但我有几点疑问
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;
作者: csumck    时间: 2013-01-17 16:22
這誰寫的代碼,問寫這代碼的人。。。
作者: hededisanan00    时间: 2013-01-17 19:42
公司的代码,很久前就有了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2