SDL: безопасно ли это делать в многопоточной программе? - PullRequest
2 голосов
/ 06 октября 2010

У меня есть тема, которая делает следующее:

  • Инициализирует SDL
  • Хранит указатель на SDL_Surface
  • Заходит в цикл и ждет любых событий мыши и обрабатывает их

В другом потоке есть функция, которая делает следующее:

  • Получает указатель на SDL_Surface
  • Имеет ли SDL_LockSurface
  • Манипулирует пикселями
  • Имеет ли SDL_UnlockSurface
  • Звонки SDL_Flip на поверхность

Я прочитал в документации, что обычно вызовы функций SDL lib должны быть из одного потока. Включает ли это прямое изменение SDL_Surface? Как насчет использования функций блокировки и разблокировки для поверхности? Я думаю, что эти пары блокировки и разблокировки предназначены для использования в многопоточных ситуациях.

Как насчет функции SDL_Flip? Если это нужно вызвать из потока SDL, который инициализировал SDL, то я мог бы просто сообщить о событии пользователя и обработать его в другом потоке.

1 Ответ

4 голосов
/ 07 октября 2010

Блокировка / разблокировка на SDL_Surfaces предназначены для обработки бэкэндов, которые помещают растровые изображения в нечто отличное от системной памяти.Блокировка поверхности возвращает растровое изображение обратно в системную память для внесения изменений, а разблокировка выталкивает его обратно.

Они не предназначены для многопоточности.

Вы могли бы получитьпутем блокировки / разблокировки поверхности в основном потоке и передачи указателя растрового изображения в ваш рабочий поток.

...