Utilisation de Dispatch avec la boucle principale de SWT

Mon application java/jython exécute une boucle SWT principale «par défaut» comme celle-ci:

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

Sous Mac OS X, tout le code associé à SWT doit être exécuté dans le thread principal, comme suit:

from com.apple.concurrent import Dispatch

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

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

call(Main())

Jusqu'à présent, cela fonctionne bien. Passons maintenant à la partie problématique: j’ai besoin, à un moment donné, d’exécuter du code lié à SWT en dehors de la méthode Main.run .

Lorsque j'utilise la même magie call() pendant que la boucle principale est en cours d'exécution, rien ne se passe puisque le thread est occupé (l'appel async, comme indiqué ci-dessus, est renvoyé immédiatement, mais n'exécute jamais de code et les blocs d'appel synchrones pour toujours).

display.readAndDispatch() ne doit-il pas traiter ces appels? Existe-t-il un moyen de faire exécuter du code sur ce fil de manière propre (c'est-à-dire sans créer ma propre file d'attente d'événements)?

Réimplémenter ce contenu dans la boucle principale serait relativement facile, mais j’ai l’impression que je manque quelque chose de très évident ici.

1

1 Réponses

Compris cela, display.asyncExec fait justement cela.

0
ajouté