2010-10-06 52 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