Мое приложение java / jython выполняет основной цикл SWT по умолчанию, например:
while not shell.isDisposed():
if not display.readAndDispatch():
display.sleep()
В Mac OS X весь код, связанный с SWT, должен выполняться в главном потоке следующим образом:
from com.apple.concurrent import Dispatch
call = Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute
class Main(Runnable):
def run(self):
# main loop here
call(Main())
Пока все работает нормально.Теперь к проблемной части: мне нужно, в какой-то момент, выполнить SWT-связанный код вне метода Main.run
.
Когда я использую ту же магию call()
, когда работает основной циклничего не происходит, поскольку поток занят (асинхронный вызов, как показано выше, немедленно возвращается, но никогда не выполняет никакого кода, а синхронные вызовы блокируются вечно).
Разве display.readAndDispatch()
не должен на самом деле обрабатывать эти вызовы?Есть ли способ, которым я могу выполнить код в этом потоке чистым способом (то есть, не создавая собственную очередь событий)?
Повторно реализовать этот материал внутри основного цикла было бы относительно легко, но я чувствую,как будто я упускаю что-то очень очевидное здесь.