我有一些代码在一个单独的线程上运行,我的主GUI线程依赖于该代码。我已经做了一个布尔标志来将作业标记为已完成,但是在设置该标志时我无法想出一种调用函数的方法。
像这样阻止主线程和应用程序冻结,这是我想要避免的:
while not flag:
pass
callback()
使用Clock.idle()
或Clock.usleep(1)
等号码代替pass
也无效。 Kivy中有什么东西像Clock.schedule_once
接受一个标志,在每个事件循环迭代中检查它并在True
之后调用回调吗?
修改
这是标志设置的地方,是Class 1的一部分:
async def prepare(self):
# heavy computations...
self.flag = True
这里是Class 2,kivy.app.App
子类,它具有Class 1的object属性并在循环中检查它的flag
属性:
def action(self):
# start the `prepare` method here
while not self.obj.flag:
pass
proceed()
答案 0 :(得分:0)
你可以这样设置标志。:
def prepare(self):
# heavy computations...
self.flag = True
YourAppClass.startClock()
在你的App类中,有这样的东西:
YourAppClass(App):
def startClock(self):
Clock.schedule_once(self.myCallback,0) # run clock thread next frame
def myCallback(self,dt):
# do something