iPhone "multi-threading" Otázkou

hlasů
1

Mám jednoduchý iPhone hra se skládá ze dvou „nití“: hlavní herní smyčku, kde jsou všechny aktualizace a vykreslování stane 30krát za sekundu (NSTimer) ... a „závit“, který volá akcelerometru delegátovi 100krát za sekundu. Mám proměnnou „xPosition“, který je aktualizován ve funkci akcelerometr delegáta a použitý ve hře smyčce. Je zde možnost, že dvě „nitě“ při pokusu o použití xPosition současně (tedy způsobující havárii nebo nějaký jiný problém). Pokud ano, jak to mohu opravit w / minimálním dopadem na výkon herní?

Byl jsem pomocí tohoto set-up pro mnoho měsíců vývoje a testování kumulativní a já jsem nikdy narazit na žádné problémy.

Na zdraví!

Položena 09/05/2010 v 07:24
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Pokud je váš NSTimerúkol a vaše herní smyčka jsou obě spustit z hlavního vlákna nebudete narazíte na nějaké problémy s to, protože pouze jeden z nich bude vykonávat současně. Navíc žádný z nich bránilo straně druhé.

Nicméně, pokud používáte různé závity, musíte být opatrní při použití xPositionv herním smyčce, protože to je hodnota by mohla být kdykoli aktualizovat z druhé nitě - i když je tam jen jeden procesor. Jeden jednoduchý způsob, jak dostat přes to by bylo přiřadit hodnotu xPositiondo lokální proměnné v herním smyčce a jen odkazovat tuto proměnnou pro každou nechává pokračovat ve smyčce.

Odpovězeno 09/05/2010 v 12:03
zdroj uživatelem

hlasů
1

Pokud to jen aktualizovány v akcelerometru nití, pak není moc problém. V nejhorším případě je, že činí nit neuvidí změnu k datům akcelerometru závitu. Vzhledem k tomu, že jste běží na jednom procesoru, že to není pravděpodobné. Že tento problém lze řešit, pokud jste označili proměnné jako ‚volatile‘ ve zdrojovém kódu.

Odpovězeno 09/05/2010 v 07:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more