应用程序挂起在threading.Timer.start()

时间:2012-07-10 21:03:04

标签: python multithreading timer resize wxpython

我有来自wxPython的wx.Frame,并希望在调整大小时进行中间和最终更新。

因为我没有找到调整大小结束事件,所以我的方法是在wx.EVT_SIZE上进行中间更新,并在wx.EVT_SIZE开始的计时器中进行最终更新。它大部分时间都有效,但有时会挂起threading.Timer.start(意思是Before最后打印[见代码])。你知道为什么吗?

这是调整大小处理程序和计时器方法的代码:

def _on_resize(self, event):
    self.Layout()
    self._resize_lock.acquire()
    print 'resize event'
    #Intermediate update is done here
    self._resize_lock.release()
    if self._resize_timer != None:
        self._resize_timer.cancel()
    self._resize_timer = threading.Timer(0.75,
        self._resize_timer_method)
    print 'Before'
    self._resize_timer.start()
    print 'After'

def _resize_timer_method(self):
    self._resize_lock.acquire()
    print 'resize timer'
    #Final update is done here
    self._resize_lock.release()

PS:如果您知道如何结束调整大小的事件,请告诉我。

1 个答案:

答案 0 :(得分:1)

为什么在调整大小时需要更新?无论如何,我认为你最好使用wx.Timer()。我怀疑你做的事情不是线程安全的,而且让事情变得无法预测。