如何解决计时器问题

时间:2013-05-07 16:47:30

标签: python timer

我是个傻瓜。我正在谈论a,b,c初学者。我正在上课,我正在进行一项项目,我被迫坚持下去。我写了这个代码,它接缝工作正常,除非不准确。我想我必须重写整个代码,但我想在我做之前先试试你们。这是我同行给予的唯一选择:(

===删除====

这使我的计时器工作但不正确。我的问题是,你可以看到增量1开始的同时另一个变量为0.这使得时钟关闭,因为9和0同时发生。我可以在这段代码中做些什么来确保在整个工厂秒之后+ 1或者z在0或0之间出现?我尝试过一些东西。没有什么是有效的,我可以访问的有限的东西(及时(只有时间到时间,时间()),数学等模块)所以我希望你的答案将是真正的基本。

我希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

import time
import datetime

class timer():
    def start(self):
        while 1:
            x = datetime.datetime.utcnow()
            print(x.strftime('%M.%S.%f'))
            time.sleep(0.1)

worker = timer()
worker.start()

这就是工作。 请注意,Python的准确性非常有限,如果你想获得一个更完美的计时器,你必须存储最后一个已知的毫秒(1/1000秒)并创建一个while 1循环来等待完全纠正大量的时间,然后释放并继续start()内的无限循环。

有些事情:

这将打印当前时间

import time
import datetime

def getTime():
    return int(round(time.time() * 1000))

class timer():
    def start(self):
        lastRun = getTime()
        while 1:
            while getTime() - lastRun < 100:
                pass
            lastRun = getTime()
            x = datetime.datetime.utcnow()
            print(x.strftime('%M.%S.%f'))

worker = timer()
worker.start()

这和Python一样准确。
并向解释部分说明:

x = datetime.datetime.utcnow()会将当前时间显示在名为x的变量中。在python中,变量是带有函数的“对象”..而这个特定的变量作为一个名为strftime的函数 strftime接受一些参数,并将当前时间转换为您希望能够读取的字符串,在这种情况下,我们将创建%M分钟,然后是一个点,然后是{{1对于秒,最后是一个点后跟%S,这是毫秒 当然,它基于您当前的时间,如果您需要计算某些内容的运行时间,您可以将%f添加到time.time() - self.time函数之一而不是datetime.datetime中,这样它就会计算一直运行的时间。

这是一个秒表

utcnow()

代码几乎相同,唯一的区别是使用存储“启动时间”的import time import datetime def getTime(): return int(round(time.time() * 1000)) class timer(): def __init__(self): self.time = datetime.datetime.today() def start(self): lastRun = getTime() while 1: while getTime() - lastRun < 100: pass lastRun = getTime() x = datetime.datetime.today() - self.time print(x) worker = timer() worker.start() ,我们将self.time减去now,因此操作将是:

  • 商店启动
  • 对于每个循环,获取“now”
  • now-startup =正在运行的时间
  • 打印结果,将自动格式化为“0:00:01.800000”

答案 1 :(得分:0)

这是您的代码修改为正确递增,并显示像伪计时器(分钟,秒和1/10秒)。 请注意,这不是真正的计时器,因为模拟5分钟的时间增量只需要大约一秒钟。 (Torxed的答案实现了一个真正的计时器。)

fsec = 0
sec = 0
minute = 0

while (minute < 5):
    fsec += 1
    if fsec == 10:
        fsec = 0
        sec += 1
        if sec == 60:
            sec = 0
            minute += 1
    print str(minute) + ":" + str(sec) + "." + str(fsec)