Использование диспетчеризации с основным циклом SWT - PullRequest
1 голос
/ 12 ноября 2011

Мое приложение 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() не должен на самом деле обрабатывать эти вызовы?Есть ли способ, которым я могу выполнить код в этом потоке чистым способом (то есть, не создавая собственную очередь событий)?

Повторно реализовать этот материал внутри основного цикла было бы относительно легко, но я чувствую,как будто я упускаю что-то очень очевидное здесь.

1 Ответ

0 голосов
/ 12 ноября 2011

Понял, display.asyncExec так и делает.

...