multithreading - 如何正确使用SDl_Threads?

标签 multithreading sdl

我是线程,SDL和图形工作原理的新手。我一直在浏览LazyFoo的所有SDL教程,并且对我有很大的帮助。但是在有关多线程的教程中,他评论说永远不要在单独的线程中使用视频功能,否则可能会引起问题。我很好奇它应该如何做,因为我对图形和线程仍然不太了解。

由于我的一个项目是射击游戏,我想知道我是否应该创建一个线程来显示所有图形,一个线程接收所有玩家输入的船只信息,另一个线程接收敌方AI的输入信息。

如果这不是应该做的事情,(我认为这是错误的),是否有人对如何通过用户输入和带有线程的敌方AI实现图形有任何建议?

对于Lazyfoo的教程,这是链接:
http://lazyfoo.net/SDL_tutorials/

最佳答案

刚开始时,按职责划分线程可能会容易得多。导致更大的可伸缩性的更“正确”的方法是使用线程池。有预先构建的线程池解决方案,其中包括一个针对SDL的解决方案。

如果您使用OpenGL或DirectX进行渲染,我怀疑对这些API的调用会产生大量开销,因此您至少可以在主线程中执行游戏循环的(必要的)顺序部分:获取输入,更新世界模型(包括使用ai calcs的结果),渲染。然后,您可以让AI网络线程并行运行。因此,您无需担心单独的渲染线程。有一个异常(exception):如果您要在软件中进行计算量大的渲染(我的意思是像在光线转换/光线跟踪中那样),那么最好以某种方式在并行线程上执行“逻辑”渲染,然后写入帧缓冲区,然后在您的主线程中执行上述给定的序列,并使用例如blit准备好的帧缓冲区。 GDI。

关于渲染,是的,仅从单个线程(主线程)进行AFAIK渲染通常是(或曾经)确保例如。使用OpenGL,您没有任何问题。同样,FAIFK不再是主要平台上的问题。另外,我也不知道GDI或DirectX是否分别具有相同的问题。

关于multithreading - 如何正确使用SDl_Threads?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742789/

相关文章:

c++ - SDL_Loadbitmap 作为类中的静态成员

c++ - 在Linux上使用GCC/Sublime编译SDL程序

java - 实现简单工作队列的问题

ubuntu - 使用 SDL 时腻子中的 "Init kbd"

c++ - SDL 窗口不显示

C#:在漫长的过程中显示模态进度对话框

c - SDL 库内存泄漏

c++ - 如何使用类中的线程操作 vector ?

c# - 何时处理带有子任务的 System.Threading.Task?

c++ - 错误:没有用于调用 std::thread 的匹配函数