SWTのメインループでディスパッチを使用する

私のjava/jythonアプリケーションは次のように 'default' 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())

これまでのところ、これはうまく動作します。今問題のある部分に:私は、ある時点で、 Main.run メソッドの外部からSWT関連のコードを実行する必要があります。

メインループの実行中に同じ call()マジックを使用すると、スレッドがビジーであるため何も起こりません(非同期呼び出しはすぐに戻りますが、永遠に)。

display.readAndDispatch()は実際にこれらの呼び出しを処理するべきではありませんか?クリーンな方法でこのスレッド上でコードを実行できる方法はありますか(つまり、自分でイベントキューを作成する必要はありません)。

メインループの内部でこれを再実装するのは比較的簡単ですが、私はここで非常に明白な何かを見逃しているように感じます。

1

1 答え

これを見て、 display.asyncExec はそれだけです。

0
追加された