我制作了一款使用游戏循环的游戏。 现在我想在wxWidgets中为这个游戏实现一个GUI。
问题在于,当我初始化GUI时,程序的控制仍然在GUI循环中,并且不会进入游戏循环。
那么,我可以让GUI在自己的线程上运行吗?
答案 0 :(得分:5)
您可以,但保留所有代码,这些代码与主线程/ EDT(事件调度线程)上的GUI交互。对GUI元素的并发访问不是设计意图,而是会导致问题。相反,将游戏循环放入wxThread
并从那里开始适当的事件。然后可以在EDT上处理这些事件以更新GUI或渲染帧。
另一种解决方案是,使用wxTimer
在主线程上调用游戏循环的单次迭代。
注意:
wxTimer
完全支持频率限制和更新事件的合并。在一个单独的线程中,您需要在所需周期/迭代时间的剩余时间内休眠或等待由主线程触发的信号量。wxMutex
等同步对象实现与游戏状态共享数据的访问权限。您最好使用C ++ 11中的std::mutex
和std::thread
。示例: