有没有办法将wxWidget GUI传递给wxThread?

时间:2013-11-16 13:47:43

标签: c++ multithreading user-interface wxwidgets

我制作了一款使用游戏循环的游戏。 现在我想在wxWidgets中为这个游戏实现一个GUI。

问题在于,当我初始化GUI时,程序的控制仍然在GUI循环中,并且不会进入游戏循环。

那么,我可以让GUI在自己的线程上运行吗?

1 个答案:

答案 0 :(得分:5)

您可以,但保留所有代码,这些代码与主线程/ EDT(事件调度线程)上的GUI交互。对GUI元素的并发访问不是设计意图,而是会导致问题。相反,将游戏循环放入wxThread并从那里开始适当的事件。然后可以在EDT上处理这些事件以更新GUI或渲染帧。

另一种解决方案是,使用wxTimer在主线程上调用游戏循环的单次迭代。

注意:

  • 如有必要,限制游戏循环或合并事件。 wxTimer完全支持频率限制和更新事件的合并。在一个单独的线程中,您需要在所需周期/迭代时间的剩余时间内休眠或等待由主线程触发的信号量。
  • 使用wxMutex等同步对象实现与游戏状态共享数据的访问权限。您最好使用C ++ 11中的std::mutexstd::thread

示例: