免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1561 | 回复: 2

[C] 一个精确获取未来某时刻的函数的疑问 [复制链接]

论坛徽章:
0
发表于 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;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-01-17 16:22 |显示全部楼层
這誰寫的代碼,問寫這代碼的人。。。

论坛徽章:
0
发表于 2013-01-17 19:42 |显示全部楼层
公司的代码,很久前就有了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP