代码之家  ›  专栏  ›  技术社区  ›  Sherif

函数time()是如何告诉当前时间的,甚至当计算机早些时候关机的时候?

  •  10
  • Sherif  · 技术社区  · 15 年前

    我们如何处理计时器与毫秒(0.001)的关系?我们如何根据需要划分秒?我们如何处理第二个问题?你说什么?

    7 回复  |  直到 15 年前
        1
  •  38
  •   nonopolarity    15 年前

    http://computer.howstuffworks.com/question319.htm

    在您的计算机(以及其他 小玩意),电池为芯片供电 称为实时时钟(rtc)芯片。 RTC本质上是一块石英表。 它一直在运行,不管是否 电脑有电了。电池 为这个钟供电。当电脑 启动,过程的一部分是 查询RTC以获取正确的时间 和日期。一个小小的石英钟 这可能会持续五到七年 用一个小电池。然后就是 是时候更换电池了。

        2
  •  9
  •   Jeffrey Kemp    15 年前

    您的电脑将有一个 hardware clock ,由电池供电,即使在电脑关机时,它也会一直滴答作响。PC知道它的时钟运行的有多快,所以它可以确定一秒钟过去的时间。

    最初,PC不知道它是什么时间(即它只是从零开始计数),所以必须告诉它当前的时间是什么-这可以在 BIOS 设置并存储在 CMOS 或可通过互联网获取(例如通过与时钟同步 NIST )

        3
  •  7
  •   dar7yl    15 年前

    一些概述,以及更多信息:

    1)计算机在启动时读取实时时钟,并用它来设置内部时钟。

    2)从那时起,计算机只使用它的CPU时钟-它不会重新读取RTC(正常情况下)。

    3)由于热不稳定性、功率波动、在数秒内找不到精确的除数、中断延迟、宇宙射线和月球相位等原因,计算机的内部时钟会发生漂移。

    4)时钟漂移的大小可以是每天几秒(每月几十或数百秒)的顺序。

    5)大多数计算机能够(通过互联网)连接到时间服务器,定期重置时钟。

    6)使用时间服务器可以将精度提高到几十毫秒(通常)。我的电脑每15分钟更新一次。

        4
  •  3
  •   Alex Brown    15 年前

    计算机知道时间是因为,像你一样,他们也有一个数字手表,他们不时地看。

    当你买了一台新电脑或搬到了一个新的国家,你可以设置手表,或者你的电脑可以问互联网时间是多少,这有助于阻止它运行缓慢或快速。

    作为计算机的用户,您可以询问当前时间,也可以要求计算机充当闹钟。有些电脑甚至可以在某个特定的时间打开自己的电源,让自己重新振作起来,或者用最喜欢的音乐唤醒你。

    在内部,计算机能够以毫秒、微秒甚至纳秒来显示时间。然而,这并不是完全准确的,相邻的两台计算机对时间有不同的想法(以纳秒为单位)。但它仍然有用。

    计算机可以在未来设置几毫秒的警报,通常这样做,它知道什么时候停止思考你的电子邮件程序和花一些时间思考你的网络浏览器。然后它会设置另一个警报,以便知道几毫秒后返回电子邮件。

    作为一个程序员,你也可以使用这个工具,例如,你可以使用“计时器”在游戏中的某个关卡上设置一个时间限制。或者你可以用计时器来判断你应该什么时候把动画的下一帧放到显示器上——也许是每秒25次(即每40毫秒)。

        5
  •  2
  •   Sudhir Jonathan    15 年前

    为了回答这个主要问题,bios时钟在你的主板上有一个电池,就像Jian的答案所说的那样。当机器关闭时,它能保持时间。

    要回答我认为您的第二个问题,您可以通过执行1000的整数除法从毫秒值中得到第二个值,如下所示:

    second = (int) (milliseconds / 1000);
    

    如果你问我们怎样才能得到如此精确的时间,看看Esteban的答案…石英晶体在一定时间内振动,比如说0.00001秒。我们只是做一个计算振动的电路。当我们达到100000次振动时,我们宣布一秒钟过去并更新时钟。

    我们可以通过这种方式计算振动来获得任何精度…任何比我们使用的晶体振动周期大的精度。

        6
  •  0
  •   Esteban Araya    15 年前

    主板上有一个滴答作响的时钟。每一个刻度代表一个时间单位。

    更准确地说,时钟通常是一个石英晶体,在给定的频率振荡;一些常见的CPU时钟频率是33.33和40兆赫。

        7
  •  0
  •   GregC Benjamin Baumann    15 年前

    绝对时间是从1970年开始用32位秒计数器测量的。这可能导致“2038年的问题”,在那里它只是溢出。因此,在现代Windows和Unix平台上使用的64位时间API(包括基于BSD的MacOS)。

    通常,PC用户对时间间隔感兴趣,而不是发生重大事件后的绝对时间。计算机的一种常见实现有一种叫做计时器的东西,它允许这种情况发生。这些计时器甚至可以在电脑没有检测硬件唤醒状态、切换睡眠模式或睡眠不足的情况下运行。英特尔的处理器文档详细介绍了这些。