| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 453 人关注过本帖
标题:关于显示时间的问题
只看楼主 加入收藏
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
关于显示时间的问题
下面是显示时间的程序,我想问的是:
Sleep函数前面的计算需要时间,所以显示时间是否存在误差?
如果存在,在经过大量的循环后,时间误差累计凑够1秒,加上Sleep(1000),时间会不会一次性突然跳过2秒?

程序代码:
#include <stdio.h>
#include <windows.h>
#include <time.h>

int main()
{
    struct tm *ptr;
    for(;;)
    {
        time_t current = time(NULL);
        ptr = localtime(&current);
        printf("\r%.2d:%.2d:%.2d", ptr->tm_hour, ptr->tm_min, ptr->tm_sec);
        Sleep(1000);
    }
    return 0;
}
搜索更多相关主题的帖子: color 
2015-06-01 21:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Sleep(1000)只是这个函数自己停留1s,与别的无关。

授人以渔,不授人以鱼。
2015-06-01 21:50
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
回复 2楼 TonyDeng
我假设前面的计算每次耗时1毫秒(当然只是假设),当时间是22:00:00.999时current获取时间,此时显示是22:00:00。算完这几步后(1毫秒到了)就是22:00:01,再加上Sleep,就是22:00:02。接着current再获取时间,似乎就不对了。
2015-06-01 22:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那是你获取时间的逻辑方式不对,无法达到预期的目标。

授人以渔,不授人以鱼。
2015-06-01 22:03
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
回复 4楼 TonyDeng
嗯,我是觉得不对,但现在只想得到这个,有没有更好的办法
2015-06-01 22:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
显示一段过程的用时,用时间差计算。执行前记一次时刻,执行后再记一次,前后相减。

授人以渔,不授人以鱼。
2015-06-01 22:07
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
回复 6楼 TonyDeng
经过点拨,想了半天,似乎搞懂了,谢谢

程序代码:
#include <stdio.h>
#include <windows.h>
#include <time.h>

int main()
{
    struct tm *ptr;
    time_t start, current;
    for(;;)
    {
        start = clock();
        current = time(NULL);
        ptr = localtime(&current);
        printf("\r%.2d:%.2d:%.2d", ptr->tm_hour, ptr->tm_min, ptr->tm_sec);
        Sleep(1000-clock()+start);
    }
    return 0;
}


[ 本帖最后由 我爱吃青菜 于 2015-6-2 12:31 编辑 ]
2015-06-02 12:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
第一,计算机不可能有绝对精确的时间,它受限于CPU频率,除非参照外部计时,否则靠自身计算总有偏差到无法忍受的程度。第二,分时系统更不精确,它与系统同时运行的进程数目和性质有关,你这样算出来的时间包含了别的进程的时间。

授人以渔,不授人以鱼。
2015-06-02 19:22
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
受教了
2015-06-02 20:19
快速回复:关于显示时间的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017852 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved