假设我有一个更新应用程序某些内部状态的函数:
def on_change(*args, **kwargs):
pass # some compute intensive state change
[此功能每秒可运行多达一百次(由于许多鼠标滚轮事件触发了更新)-我只想执行一次以上功能,并且只应执行最后一次调用。
解决这种情况的最佳设计模式是什么?我能想到的唯一方法是为每个on_change调用生成一个单独的线程并在它们之间共享一个变量,但这听起来太混乱了……
谢谢!
class Waiter:
def __init__(self):
self.args = ()
self.kwargs = {}
self.changed = False
def on_change(self, *args, **kwargs):
# This is the event handler
# It does nothing but save the latest arguments
self.args = args
self.kwargs = kwargs
self.changed = True
def tick(self):
# Call this function once per second, or whatever
if self.changed:
# Do your updates, using self.args and self.kwargs
self.changed = False
由于您提到了鼠标事件,所以您显然在编写GUI应用程序。以我的经验,所有GUI引擎都具有计时器,并具有定期调用函数的能力。使用该功能来定期呼叫滴答声。