关于Python中定时器的小误解

1 投票
1 回答
1459 浏览
提问于 2025-04-15 17:16

有人能告诉我怎么在我的代码中多次使用这个Python的定时器类吗?

import MOD

class timer:
    def __init__(self, seconds):
         self.start(seconds)
    def start(self, seconds):
         self.startTime = MOD.secCounter()
         self.expirationTime = self.startTime + seconds
         if seconds != 0:
            self.running = 1
            self.expired = 0
         else:  
            self.running = 0  
            self.expired = 0
    def stop(self):
         self.running = 0
         self.expired = 0
    def isexpired(self):
         if self.running == 1:  
            timeNow = MOD.secCounter()  
            if timeNow > self.expirationTime:    
               self.running = 0    
               self.expired = 1  
            else:    
               self.expired = 0
         return self.expired
    def isrunning(self):
         if self.running == 1:  
             timeNow = MOD.secCounter()  
             if timeNow > self.expirationTime:    
                self.running = 0    
                self.expired = 1  
             else:    
                self.expired = 0
         return self.running
    def change(self, seconds):
         self.expirationTime = self.startTime + seconds
    def count(self):
         if self.running == 1:  
            timeNow = MOD.secCounter()  
            return (timeNow - self.startTime)
         else:  
            return -1

他们写了这个评论:

下面是一个关于如何使用这个类的简单例子:

    import timers
    timerA = timers.timer(0)
    timerA.start(15)
        while 1:  
            if timerA.isexpired():    
               print 'timerA expired'   
               break

但是我不知道怎么在我的代码中多次使用它,因为我需要在代码中使用多个定时器,

我应该写

    timerB = timers.timer(1)
    timerB.start(1800)
    while 1:  
        if timerB.isexpired():    
        print 'timerA expired'  
        break

请帮帮我

1 个回答

2

关闭 - timers.timer的参数是定时器最开始应该计时的秒数。但是每次你调用timers.timer()时,都会得到一个新的定时器实例。

所以你的代码可以写成这样:

  timerB = timers.timer(1800)
    while 1:  
        if timerB.isexpired():    
        print 'timerA expired'  
        break

不过这样有点误导 - timerA和timerB是两个独立的定时器,所以timerB.isexpired()并不能告诉你timerA的状态。也许你是想说“timerB到期了”?

我还建议不要这么频繁地检查timerB.isexpired()。可以在每次检查后暂停一秒钟吗?

撰写回答