合并两个事件循环(Cherrypy 和 Wxpython)

1 投票
2 回答
1090 浏览
提问于 2025-04-15 17:58

好的,我有一个用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,我给了你一个最好的回答,那个回答还得到了很多赞,你也认可了。那你为什么还要再问一次呢?

撰写回答