SDL:在多线程程序中这样做安全吗?

4

我有一个线程,它执行以下操作:

  • 初始化SDL
  • 存储指向SDL_Surface的指针
  • 进入循环并等待任何鼠标事件并处理它们

在另一个线程中,有一个函数执行以下操作:

  • 获取指向SDL_Surface的指针
  • 执行SDL_LockSurface
  • 操作像素
  • 执行SDL_UnlockSurface
  • 在表面上调用SDL_Flip

我在文档中读到,通常SDL库函数调用应该都来自同一个线程。这是否包括直接更改SDL_Surface?那么关于表面的锁定和解锁函数呢?我认为这对锁定和解锁是用于多线程情况。

那么SDL_Flip函数呢?如果需要从初始化SDL的SDL线程中调用它,那么我可以简单地发出用户事件并在其他线程中处理它。

1个回答

4
SDL_Surface上的锁定/解锁是为了处理将位图放置在非系统内存中的后端。锁定表面会将位图拉回系统内存进行修改,而解锁则将其推出系统内存。

它们不是用于多线程的。

您可能可以通过在主线程中锁定/解锁表面并将位图指针传递给工作线程来完成。


4
在大多数平台上,SDL_LockSurface()和SDL_UnlockSurface是无操作指令。我现在记不清具体情况了,但我认为它们只在GDI或DirectX上需要。无论如何,它们绝对无法用于同步线程。 - ninjalj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接