为什么调用processEvents会在最多9秒内阻止什么操作?
我有一个带有基于PySide的QT接口的应用程序,其中UI代码作为较低级别实际应用程序逻辑的分离层。当用户执行执行可能运行一段时间的较低级别应用程序逻辑的操作时,实际发生的是:
这些都散布在很多文件中,以解耦的方式实现。我会尝试提供片段来描绘流程。
解耦的低级逻辑工作循环:
while not completed_event.wait(0.1) and not work_state.is_cancelled():
work_completeness, work_description = work_state.get_completeness(), work_state.get_description()
for client in self.clients:
if work_completeness != last_completeness or work_description != last_description:
client.event_prolonged_action_update(client is acting_client, work_description, step_count * work_completeness)
# THE LAST CALL TO THE NEXT LINE LOCKS UP FOR NO REASON
client.event_tick(client is acting_client)
last_completeness, last_description = work_completeness, work_description
PySide / QT层客户端event_tick函数:
def event_tick(self, active_client):
# THIS IS WHERE THE LOCK UP HAPPENS
QtGui.qApp.processEvents()
PySide / QT层中的信号/插槽使用,以获取GUI线程上发生的工作线程调用:
def event_pre_line_change(self, active_client, line0, line_count):
self.pre_line_change_signal.emit((line0, line_count))
def event_post_line_change(self, active_client, line0, line_count):
self.post_line_change_signal.emit((line0, line_count))
def event_uncertain_reference_modification(self, active_client, data_type_from, data_type_to, address, length):
self.uncertain_reference_modification_signal.emit((data_type_from, data_type_to, address, length))
我使用信号/插槽将工作线程上的调用委托给GUI线程的原因是PySide / QT需要更新UI的原因。
如果你想更深入地挖掘复制案例: