GUI に wxPython を使用しています。AppLogic
クラスには、まさにこのクラスのメソッドで実行されるワーカー スレッドがあります。
これはGUI
クラスです:
class GUI:
_wx_app = None
_main_window = None
_app_logic = None
def start(self):
# bla bla bla
self._main_window.Show()
self._app_logic.begin()
self._wx_app.MainLoop()
def _cancel_listener(self):
"""Called from MainWindow, if the user has clicked the cancel
button."""
print("I'm leaving this scope.")
self._app_logic.cancel() # Should cancel the task done in
# a second thread.
def _status_listener(self, status_text):
"""Called often by the worker thread."""
print("Here I am again.")
if self._main_window.status.GetLabel() != status_text:
self._main_window.status.SetLabel(status_text)
上記からAppLogic
呼び出されるクラスの cancel メソッドは次のとおりです。_cancel_listener
def cancel(self):
self._shall_abort = True
self._thread.join(self._some_time_out)
assert self._thread.isAlive() == False
join
どういうわけか、 and GetLabel
(したがって?) が関係しているデッドロックがありMainLoop
ますが、何が起こっているのかよくわかりません。誰かがこれについてもっと洞察を持っていますか? それは素晴らしいことです!