我为 EVT_IDLE
定义了一个处理程序,它为我执行特定的后台任务。 (该任务是从几个进程中获取完成的工作并将其集成到某个对象中,从而在 GUI 中进行可见的更改。)
问题是当用户没有移动鼠标或做任何事情时,EVT_IDLE
不会被调用超过一次。我希望这个处理程序一直在工作。所以我尝试在处理程序的末尾调用 event.RequestMore()
。可以,但现在需要大量 CPU。 (我猜它只是在该任务上过度循环。)
我愿意限制任务每秒执行的次数;我该怎么做?
或者您有其他解决方案吗?
最佳答案
像这样的事情(最多每秒执行一次):
...
def On_Idle(self, event):
if not self.queued_batch:
wx.CallLater(1000, self.Do_Batch)
self.queued_batch = True
def Do_Batch(self):
# <- insert your stuff here
self.queued_batch = False
...
哦,不要忘记在构造函数中将 self.queued_batch 设置为 False,并可能在 On_Idle 中以某种方式调用 event.RequestMore()。
关于python - wxPython:使用 EVT_IDLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783023/