【发布时间】:2010-12-07 00:27:20
【问题描述】:
我正在开发一个 Snake 游戏(在 https://github.com/RobotGymnast/Gingerbread/tree/eventThreaded 上)。最初,一切(图形、事件、游戏逻辑更新、物理)都是从“主”线程调用的。然后我开始使用多线程(使用 boost 线程)。这非常简单,但我最近将图形显示逻辑拆分为一个新线程,该线程在其本地堆栈空间中分配屏幕对象。然后我将我的事件检测和事件处理逻辑拆分为一个新线程。然后我的屏幕停止出现。从我的命令行输出来看,一切仍然正常,只是屏幕停止出现。原来它挂在我的 SDL_SetVideoMode() 调用上。
我通过在“主”线程中分配我的屏幕对象并传入对图形线程的引用来解决此问题。出于某种原因,在事件逻辑的新线程中分配屏幕对象会产生问题。
自此修复以来,事件检测和事件处理不再起作用。仍在进行事件检查,例如SDL_PollEvent(),但它们根本没有接收任何事件(键盘、鼠标等)。
我怀疑 SDL 可能会进行一些幕后线程同步,但我一直在使用 boost 线程。这会是个问题吗? SDL 线程比较严格,我宁愿不切换。
以前有人遇到过这个问题吗?有什么建议吗?
【问题讨论】:
标签: c++ multithreading sdl