Multithreading 如何正确使用SDl_线程?

Multithreading 如何正确使用SDl_线程?,multithreading,sdl,Multithreading,Sdl,我不熟悉线程、SDL以及图形的一般工作方式。我一直在浏览LazyFoo的SDL教程,对我帮助很大。但在关于多线程的教程中,他评论说,永远不要在单独的线程中使用视频函数,否则可能会导致问题。我很好奇应该怎么做,因为我仍然对图形和线程有模糊的理解 由于我的一个项目是射击,我想知道我是否应该创建一个线程来显示所有的图形,一个线程接收所有玩家对他的飞船的输入,另一个线程用于敌人的AI 如果这不是应该做的,(我认为这是错误的)有人对如何用用户输入实现图形和用线程实现敌方AI有什么建议吗 对于Lazyfoo

我不熟悉线程、SDL以及图形的一般工作方式。我一直在浏览LazyFoo的SDL教程,对我帮助很大。但在关于多线程的教程中,他评论说,永远不要在单独的线程中使用视频函数,否则可能会导致问题。我很好奇应该怎么做,因为我仍然对图形和线程有模糊的理解

由于我的一个项目是射击,我想知道我是否应该创建一个线程来显示所有的图形,一个线程接收所有玩家对他的飞船的输入,另一个线程用于敌人的AI

如果这不是应该做的,(我认为这是错误的)有人对如何用用户输入实现图形和用线程实现敌方AI有什么建议吗

对于Lazyfoo的教程,以下是链接:

一般来说,我认为将渲染线程与UI/AI线程分离是一个好主意。这有助于使代码更易于理解。由于源代码中有许多可用的游戏,为什么不检查一下它们是如何完成的呢?

当您刚开始玩游戏时,根据职责划分线程会容易得多。更“正确”的方法是使用线程池,这将导致更大的可伸缩性。有一些预先构建的线程池解决方案,包括一个用于SDL的解决方案

如果您使用OpenGL或DirectX进行渲染,我怀疑对这些API的调用是否会产生太多开销,因此您至少可以在主线程中执行游戏循环的(必要的)顺序部分:获取输入、更新世界模型(包括使用ai Calc的结果)、渲染。然后你可以让人工智能,网络线程并行运行。因此,您不需要担心单独的渲染线程。这有一个例外:如果您在软件中进行计算量大的渲染(我的意思是在光线投射/光线跟踪量大的情况下),那么您最好在并行线程上执行渲染“逻辑”,写入帧缓冲区,然后在主线程中执行上述顺序,只需使用GDI等工具来临时设置准备好的帧缓冲区

关于渲染,是的,仅从单个线程(主线程)进行AFAIK渲染通常是(或曾经是)一个好主意,以确保使用OpenGL时没有问题。再说一次,这在主要平台上不再是一个问题。另外,我不知道GDI和DirectX是否分别存在同样的问题