【发布时间】:2013-05-09 00:40:31
【问题描述】:
我正在使用 Python/wxWidgets 编写一个简单的游戏。
我为主窗口编写了一个类,并为另一个获取用户输入的框架编写了一个简单的类。
到目前为止,我的架构是应用程序启动并运行第二个线程,该线程运行一个名为“gameLogic”的函数。然后主线程进入主应用循环。
gameLogic 线程按顺序运行,需要控制 UI。例如,它需要打开一个以主框架为父框架的新对话框。但是,我发现这样做最终会导致崩溃(糟糕到在 OS X 中弹出报告崩溃窗口)。
我一直在四处寻找并收集我需要重构以使用事件的信息,但我不确定如何创建自己的事件。我可以让我的 gameLogic 线程在主窗口中引发一个事件,然后会弹出输入对话框并等待输入(模态),然后将该数据返回给 gameLogic 线程。 gameLogic 线程可以在等待时阻塞,因为 UI 线程是独立的。
在我的主框架中的一个函数(事件处理程序)中,我可以创建一个输入对话框的新实例,以模态方式显示它,然后获取输入。
我已经看到了实现这一点的各种想法,但还没有找到一个很好的例子来说明如何在我的 wxFrame 对象中创建自定义事件并从另一个线程调用它,并且还没有逻辑线程阻塞并等待输入返回,然后如何将该输入返回给gameThread。
非常感谢您的建议!
【问题讨论】:
-
This blog post 展示了如何创建和发送自定义事件(以及如何使用
CallAfter和Publisher,这对于简单的情况通常更简单)。至于有逻辑线程阻塞……如果只想阻塞,使用普通线程同步;你不需要任何花哨的东西。