2010-05-09 99 views
1

我有一個簡單的iPhone遊戲,包含兩個「線程」:主要遊戲循環,其中所有更新和渲染每秒發生30次(NSTimer)...以及調用「線程」加速度計委託每秒100次。我有一個變量「xPosition」,它在遊戲循環中使用的加速度計代理功能中更新。這兩個「線程」是否有可能同時嘗試使用xPosition(從而導致崩潰或其他問題)。如果是的話,我該如何解決這個對遊戲性能影響最小的問題?iPhone「多線程」問題

我一直在使用這個設置進行多個月的開發和增量測試,我從來沒有遇到任何問題。

乾杯!

回答

2

如果您的NSTimer任務和您的遊戲循環都從主線程運行,您不會遇到任何問題,因爲它們中只有一個會同時執行。另外他們沒有一個可以搶佔另一個。

但是,如果您使用不同的線程,則在遊戲循環中使用xPosition時必須小心,因爲它的值可能隨時從其他線程更新 - 即使只有一個處理器。通過這種方法的一個簡單方法是將xPosition的值賦值給遊戲循環中的局部變量,並且僅對循環中的每次運行引用此變量。

+1

這聽起來像他只是使用香草NSTimer和加速度計委託回調,所以他所做的一切應該在主線程上運行。與此不會有衝突。 – 2010-05-09 13:43:56

+0

這正是我正在做的 – MrDatabase 2010-05-09 22:19:31

1

如果它只在加速度計線程中更新,那麼沒有太多問題。最糟糕的情況是渲染線程不會看到加速度計線程對數據的更改。由於您在單個處理器上運行,因此不太可能發生。如果您在源代碼中將該變量標記爲'volatile',則可以解決後一個問題。