【问题标题】:SDL: Is this safe to do in a multi-threaded program?SDL:在多线程程序中这样做安全吗?
【发布时间】:2010-10-06 17:39:01
【问题描述】:

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

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

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

  • 获取指向 SDL_Surface 的指针
  • 执行 SDL_LockSurface
  • 处理像素
  • 是否有 SDL_UnlockSurface
  • 在表面上调用 SDL_Flip

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

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

【问题讨论】:

    标签: c multithreading sdl


    【解决方案1】:

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

    它们不适用于多线程。

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

    【讨论】:

    • SDL_LockSurface() 和 SDL_UnlockSurface 在大多数平台上都是 nops。我现在记不清了,但我认为它们只在 GDI 或 DirectX 上需要。无论如何,它们对于同步线程绝对没用。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2012-12-18
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多