一个带微秒计时器的时钟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个带微秒计时器的时钟相关的知识,希望对你有一定的参考价值。

我正在尝试在python上创建一个微秒计时器。目标是每微秒都有一个“滴答”。

我目前的做法是:

us = list()
while len(us) <= 1000:
    t = time.time()*1000000
    if t.is_integer():
        us.append(t)

它表明,我不知道在时间方面存在明显的局限性。

656的第一个值是1532960518213592.0。 while循环以“相同”微秒执行。然后价值跳转到1532960518217613.0。最大分辨率似乎是4021 us。

我怎样才能克服这些限制?

编辑:关于此测量。

带有YouTube视频的Chrome正在后台运行。 + Outlook,团队,Adobe和其他一些东西。 CPU是i5-5200U CPU @ 2.20 GHz(2核)。

答案

问题是当前时间是操作系统提供的功能,因此它在不同系统上会有不同的行为,无论是在时钟精度方面还是在轮询频率方面。还要记住,您的程序可以暂停,并由操作系统的调度程序执行。

以下是代码的简化版本:

[time.time() * 10**6 for i in range(1000)]

在我的本地计算机(Windows Ubuntu子系统)上,这会生成以下内容(请注意它大约每秒一个有间隙):

[1532961190053186.0, 1532961190053189.0, 1532961190053190.0, 1532961190053191.0, 1532961190053192.0, 1532961190053193.0, 1532961190053194.0, 1532961190053195.0, 1532961190053196.0, 1532961190053198.0, ...]

在服务器(Ubuntu)上,这会产生以下内容(注意多次发生的同一时间):

[1532961559708196.0, 1532961559708198.0, 1532961559708199.0, 1532961559708199.0, 1532961559708199.0, 1532961559708200.0, 1532961559708200.0, 1532961559708200.0, 1532961559708200.0, 1532961559708201.0, ...]

以上是关于一个带微秒计时器的时钟的主要内容,如果未能解决你的问题,请参考以下文章

embOS推出一个RTOS的革命性功能,支持微秒和CPU时钟周期级分辨率的任务调度和API延迟参数设置

embOS推出一个RTOS的革命性功能,支持微秒和CPU时钟周期级分辨率的任务调度和API延迟参数设置

在SysTick微秒及毫秒程序举例中,定时器一次最大定时时间是多少毫秒?

ESP8266 + STC15+ I2C OLED带网络校时功能的定时器时钟

c++微秒级计时+对拍

使用系统定时器SysTick实现精确延时微秒和毫秒函数