【发布时间】:2010-01-13 07:53:13
【问题描述】:
好的,我有一个用cherrypy编写的应用程序,我想为它构建一个wxpython gui。问题是两个模块都使用闭环来处理事件,这(我假设)意味着当一个模块运行时另一个模块将被锁定。
我征求了一些建议,有人建议我合并两个事件循环,而不是使用常用的入口点(cherrypy 的 quickloop() 和 wx 的 MainLoop())
问题是我不知道该怎么做。任何建议将不胜感激。
【问题讨论】:
好的,我有一个用cherrypy编写的应用程序,我想为它构建一个wxpython gui。问题是两个模块都使用闭环来处理事件,这(我假设)意味着当一个模块运行时另一个模块将被锁定。
我征求了一些建议,有人建议我合并两个事件循环,而不是使用常用的入口点(cherrypy 的 quickloop() 和 wx 的 MainLoop())
问题是我不知道该怎么做。任何建议将不胜感激。
【问题讨论】:
你已经在这里问过同样的问题:cherrypy and wxpython,我给了你在任何地方都能找到的最好的回答,显然,这是被投票赞成并且你批准的。怎么又问了?
【讨论】:
对于cherrypy,您有来源。查看代码中quickloop() 的作用,然后尝试将此代码与WX 的MainLoop() 合并。
两个循环可能看起来像这样:
while (true) {
if (pendingEvents()) processEvents ();
else waitForEvents ();
}
您必须找到一种方法将两个等待调用合并为一个(因此如果任一事件源有未决事件,代码将继续执行)。对于 WX,请查看 Dispatch()、Pending() 和 ProcessIdle()。
或者您可以查看wxIdleEvent(参见the docs)并在其中处理所有cherrypy事件。
另一种解决方案可能是在不同的线程中运行这两个循环。在这种情况下,您不能从cherrypy 代码中调用WX 方法,反之亦然。要解决这个问题,您必须找到一种方法将消息发送到另一个线程,其中包含要调用哪个方法的所有信息。这样可以确保 WX 方法在 WX 线程中执行,cherrypy 方法在cherrypy 线程中执行。
【讨论】: