2010-01-13 9 views
1

Bon, j'ai une application écrite avec cherrypy, et je veux construire un gui wxpython pour cela. Le problème est que les deux modules utilisent une boucle fermée pour la gestion des événements, ce qui (je suppose) signifie que pendant que l'un fonctionne l'autre sera verrouillé.Fusion de deux boucles d'événements (Cherrypy et Wxpython)

J'ai demandé quelques conseils et il a été suggéré que je fusionner les deux événements boucles plutôt que d'utiliser les actions entrypoints (QuickLoop() pour cherrypy et MainLoop() pour WX)

Le problème est que je ne sais pas comment faire ça Tout avis serait grandement apprécié.

Répondre

0

Dans le cas de cherrypy, vous avez la source. Regardez dans le code ce que fait quickloop() puis essayez de fusionner ce code avec le MainLoop() de WX.

Les deux boucles seront probablement ressembler à ceci:

while (true) { 
    if (pendingEvents()) processEvents(); 
    else waitForEvents(); 
} 

Vous devez trouver un moyen de fusionner les deux appels en attente dans l'un (si le code continue si l'événement source avait des événements en attente). Pour WX, regardez Dispatch(), Pending() et ProcessIdle().

Ou vous pouvez regarder wxIdleEvent (voir the docs) et de traiter tous les événements Cherrypy là-bas.

Une autre solution pourrait être d'exécuter les deux boucles dans différents threads. Dans ce cas, vous ne pouvez pas appeler les méthodes WX à partir du code cherrypy et vice versa. Pour résoudre ce problème, vous devez trouver un moyen d'envoyer des messages à l'autre thread avec toutes les informations sur la méthode à appeler. Cela garantit que les méthodes WX sont exécutées dans le thread WX et que les méthodes cherrypy sont exécutées dans le thread cherrypy.

6

Vous avez déjà posé la même question ici: cherrypy and wxpython, et je vous ai donné la meilleure réponse que vous allez trouver n'importe où, qui a été votée et que vous avez approuvé, apparemment. Pourquoi demandez-vous encore?