0

我正在尝试实现一个线程计时器来控制串行进程的超时。

def tst_setMaxTimeFlag():

    lock.acquire()
    maxTimeFlag = 1
    lock.release()

    print "timeout!"
    return

def tst_setMaxTimeTimer(maxResponseTime):
    global responseTimer

    lock.acquire()
    maxTimeFlag = 0
    lock.release()

    responseTimer = threading.Timer(2,tst_setMaxTimeFlag)
    print "timer set!"
    responseTimer.start        
    print "timer start!"
    return

我想输出是:

  1. 定时器设置
  2. 定时器启动
  3. 暂停!

但是, tst_setMaxTimeFlag() 永远不会被调用并超时!从不打印。

如果我更改responseTimer = threading.Timer(2,tst_setMaxTimeFlag)超时responseTimer = threading.Timer(2,tst_setMaxTimeFlag())函数,则无论时间参数如何,都会立即调用。

maxTimeFlag 在 main 中设置为全局并初始化为 0。

有什么想法吗?

4

1 回答 1

3

您丢失了代码片段中的所有缩进,因此很难确定您做了什么。

最明显的问题是responseTimer.start。那只是检索对象的start方法responseTimer。您需要调用该方法来启动计时器;即,做responseTimer.start()

然后它会产生你期望的输出,在最后的“超时!”之前有大约 2 秒的延迟。被打印。

于 2013-09-06T00:50:22.493 回答