2010-10-06 54 views
2

我有一个线程执行以下操作:SDL:在多线程程序中安全吗?

  • 初始化SDL
  • 存储的指针SDL_Surface
  • 进入一个循环,等待任何鼠标事件,并对其进行处理

在另一个线程中有以下功能:

  • 获取p ointer到SDL_Surface
  • 难道一个SDL_LockSurface
  • 操纵像素
  • 难道一个SDL_UnlockSurface
  • 调用SDL_Flip表面

我已经在文档中读取一般SDL lib中的函数调用都应该在来自同一个线程。这是否包括直接更改SDL_Surface?如何使用表面的锁定和解锁功能?我认为这些锁定和解锁对旨在用于多线程情况。

SDL_Flip函数怎么样?如果这需要从初始化SDL的SDL线程中调用,那么我可以简单地发信号通知用户事件并在另一个线程中处理它。

回答

4

SDL_Surfaces上的锁定/解锁将处理将位图放在系统内存以外的其他位置的后端。锁定表面会将位图拉回到系统内存中进行修改,而解锁则将其推回。

它们不适用于多线程。

可能能够锁定/解锁主线程中的表面并将位图指针传递给工作线程。

+3

SDL_LockSurface()和SDL_UnlockSurface在大多数平台上都是不合适的。我现在记不起来了,但我认为他们只需要GDI或DirectX。无论如何,它们对于同步线程绝对无用。 – ninjalj 2010-10-06 21:47:12