Dispatch gebruiken met de hoofdlus van SWT

Mijn java/jython-app voert een 'standaard' SWT-hoofdlus als volgt uit:

while not shell.isDisposed():
    if not display.readAndDispatch():
        display.sleep()

Op Mac OS X moet alle SWT-gerelateerde code als volgt in de hoofdthread worden uitgevoerd:

from com.apple.concurrent import Dispatch

call = Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute

class Main(Runnable):
    def run(self):
        # main loop here

call(Main())

Tot nu toe werkt dit prima. Nu naar het problematische gedeelte: ik heb op een bepaald moment SWT-gerelateerde code van buiten de Main.run -methode nodig.

Wanneer ik dezelfde aanroep() magie gebruik terwijl de hoofdlus wordt uitgevoerd, gebeurt er niets omdat de thread bezet is (de asynchrone oproep zoals hierboven weergegeven keert onmiddellijk terug, maar voert nooit een code uit en synchrone oproepblokken voor altijd).

Moet display.readAndDispatch() deze oproepen eigenlijk niet verwerken? Is er een manier om code op deze thread op een schone manier uit te voeren (dat wil zeggen, zonder een eigen wachtrij te bouwen)?

Het opnieuw uitvoeren van dit spul in de hoofdlus zou relatief eenvoudig zijn, maar ik heb het gevoel dat ik hier iets heel duidelijk mis.

1

1 antwoord

Dacht dit uit, display.asyncExec doet precies dat.

0
toegevoegd