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

时间:2010-10-06 17:39:02

标签: c multithreading sdl

我有一个执行以下操作的主题:

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

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

  • 获取指向SDL_Surface
  • 的指针
  • 是否有SDL_LockSurface
  • 操纵像素
  • 是否有SDL_UnlockSurface
  • 在表面上调用SDL_Flip

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

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

1 个答案:

答案 0 :(得分:4)

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

它们不适用于多线程。

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