2010-05-09 5 views
1

두 가지 "스레드"로 구성된 간단한 iPhone 게임이 있습니다. 모든 게임이 초당 30 회 (NSTimer) 업데이트되는 기본 게임 루프 ... 가속도계는 초당 100 번을 위임합니다. 가속도계 대리자 함수 이 게임 루프에 사용 된 변수 "xPosition"이 있습니다. 두 개의 "쓰레드"가 xPosition을 동시에 사용하려고 시도 할 가능성이 있습니다 (따라서 충돌이나 다른 문제가 발생합니다). 그렇다면 게임의 성능에 미치는 영향을 최소화하려면 어떻게해야합니까?iPhone "멀티 스레딩"질문

저는 여러 달 동안 개발 및 점진적 테스트를 위해이 설정을 사용해 왔지만 어떤 문제도 발생하지 않았습니다.

건배!

답변

2

NSTimer 작업과 게임 루프가 둘 다 주 스레드에서 실행되는 경우이 중 하나만 동시에 실행되므로 아무 문제가 발생하지 않습니다. 또한 그들 중 누구도 다른 것을 선점 할 수 없습니다.

다른 스레드를 사용하는 경우 xPosition을 게임 루프에 사용하는 경우 하나의 프로세서 만 있더라도 다른 스레드의 값이 언제든지 업데이트 될 수 있으므로주의해야합니다. 과거에 이것을 얻는 간단한 방법 중 하나는 xPosition 값을 게임 루프의 로컬 변수에 할당하고 루프를 통과 할 때마다이 변수를 참조하는 것입니다.

+1

그가 바닐라 NSTimer와 가속도계 위임 콜백을 사용하는 것처럼 들리므로 그가하는 모든 일이 메인 스레드에서 실행되어야합니다. 저것과 아무 충돌도 없을 것이다. –

+0

정확히 내가하고있는 일입니다. – MrDatabase

1

가속도계 스레드에서만 업데이트되는 경우 문제가별로 없습니다. 최악의 경우는 렌더 스레드가 가속도계 스레드에 의한 데이터 변경을 보지 못한다는 것입니다. 단일 프로세서에서 실행 중이므로 그럴 가능성이 없습니다. 소스 코드에서 변수를 'volatile'플래그로 지정하면 후자의 문제를 해결할 수 있습니다.

관련 문제