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

Is there a way to pass the wxWidget GUI to a wxThread?

本文关键字:wxThread GUI wxWidget 有没有      更新时间:2023-10-16

我做了一个使用游戏循环的游戏。现在我正在尝试在wxWidgets中为这个游戏实现一个GUI。

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

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

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

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

注意:

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

例子:

  • http://wiki.wxwidgets.org/Inter-Thread_and_Inter-Process_communication
  • http://wiki.wxwidgets.org/Making_a_render_loop