2012-02-16 3 views
0

내 cocos2d 게임에서 내가 파괴 해야하는 몇 가지 공이 있고, 서로 동시 스레드 2 개가 있습니다. 첫 번째 스레드는 NSMutablearray에 공을 추가하고 두 번째 스레드는이 어레이를 반복합니다. 각 공에 대한 릴리스 메서드를 호출, @ 동기화 된 (배열)와 동기화 된 블록에있는 모든 작업을 넣었지만 그 영향을받지 않고 동기화 된 블록 응용 프로그램에서 예외를 throw 할 때 __NSArrayM은 열거되는 동안 변경되었습니다. 어쩌면 다른 방법이 있습니다. 스레드를 동기화하려면?Cocos2d 응용 프로그램에 대한 스레드 동기화

+0

반복/추가의 실제 코드를 게시 할 수 있습니까? – Tudor

답변

1

하나의 스레드에서 객체를 추가하고 동일한 배열을 다른 스레드로 반복하므로 코드의이 부분을 멀티 스레드하는 것이 무의미한 것처럼 보입니다.

이유는 동일한 스레드 또는 다중 스레드 내에서 수행했는지 여부에 관계없이 can not modify an array while iterating입니다.

각 스레드마다 하나씩 두 개의 배열을 사용하면 동일한 작업을 수행 할 때마다 더 나은 결과를 얻을 수 있습니다. 둘 다 개체를 추가 한 다음 두 개체 모두 절반을 반복합니다. 객체를 분할하는 방법은 사용자가 결정하며 화면 좌표 (화면 분할) 또는 다른 조건 (즉, 각 스레드에서 처리하는 객체의 균형 수)을 기반으로 할 수 있습니다.

+0

cocos2d에 대한 질문을하고 싶습니다. 어떻게 스케줄을 처리합니까? 이 문제는 대부분 아이폰 4에서 발생했기 때문에 아이폰 3G에서 잘 작동합니다. 게임에서 Box2d가 있고 때로는 ContactListener 메서드에서이 배열을 변경하지만,이 메서드에서는 동기화 된 블록에 넣어야합니다. cocos2d는 모든 스케줄에 대해 하나의 스레드? 나는 수동으로 스레드를 만들지 않아, 난 단지 3g에서 그것이 4에서 거기에 schedlues 처리 할 수있는 스레드가 있고 그것이 응용 프로그램을 추락 한 것 같아요 –

관련 문제