如何正确使用SDl_Threads?

时间:2009-04-13 01:25:05

标签: multithreading sdl

我是线程,SDL和一般图形工作的新手。我一直在浏览所有LazyFoo的SDL教程,并且对我帮助很大。但是在他关于多线程的教程中,他评论说你不应该在单独的线程中使用视频函数,否则可能会导致问题。我很好奇应该怎么做,因为我对图形和线程仍然有一个模糊的理解。

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

如果这不是应该怎么做,(我认为这是错的)有没有人对如何使用用户输入和带有线程的敌人AI实现图形有任何建议?

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

2 个答案:

答案 0 :(得分:0)

通常我认为将渲染线程与UI / AI线程分开是个好主意。它有助于保持代码更易理解。由于源代码中有许多游戏,为什么不查看他们是如何做到的?

答案 1 :(得分:0)

在您开始时,基于职责分离线程可能要容易得多。接近这一点的更“正确”的方式是使用线程池,从而提高可扩展性。有预先构建的线程池解决方案,包括一个用于SDL。

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

关于渲染,是的,只有一个线程(主线程)的AFAIK渲染通常是一个好主意,以确保例如。使用OpenGL你没有问题。再次AFAIK这不再是主要平台上的问题。另外,我不知道GDI或DirectX是否也有同样的问题。