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

use*_*447 1 c++ user-interface multithreading wxwidgets

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

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

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

Sam*_*Sam 5

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

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

注意:

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

例子: