合并两个事件循环(Cherrypy 和 Wxpython)
好的,我有一个用cherrypy写的应用程序,我想为它做一个wxpython的图形界面。问题是这两个模块都使用了自己的事件处理循环,这意味着当一个在运行的时候,另一个就会被锁住,无法工作。
我问了一些建议,有人建议我把这两个事件循环合并在一起,而不是使用默认的入口点(cherrypy的quickloop()和wx的MainLoop())。
但我完全不知道该怎么做。任何建议都非常感谢。
2 个回答
0
在使用cherrypy的情况下,你可以查看源代码。看看quickloop()
这个函数是干什么的,然后试着把这段代码和WX的MainLoop()
合并在一起。
这两个循环可能看起来是这样的:
while (true) {
if (pendingEvents()) processEvents ();
else waitForEvents ();
}
你需要找到一种方法,把两个等待的调用合并成一个(这样只要有一个事件源有待处理的事件,代码就能继续执行)。对于WX,可以看看Dispatch()
、Pending()
和ProcessIdle()
这几个函数。
或者你也可以查看wxIdleEvent
(可以参考文档),在这里处理所有的cherrypy事件。
另一种解决方案是把这两个循环放在不同的线程中运行。在这种情况下,你不能在cherrypy的代码中调用WX的方法,反之亦然。要解决这个问题,你需要找到一种方法,把消息发送到另一个线程,并包含所有调用哪个方法的信息。这样可以确保WX的方法在WX线程中执行,而cherrypy的方法在cherrypy线程中执行。
6
你之前在这里问过同样的问题:cherrypy 和 wxpython,我给了你一个最好的回答,那个回答还得到了很多赞,你也认可了。那你为什么还要再问一次呢?