2015. 9. 24. 10:07

Cocos2d-x 쓰레드 사용 시 참고(Scheduler::performFunctionInCocosThread)

멀티 쓰레드를 사용할 경우 새로 생성한 쓰레드에서 Cocos 오브젝트에 접근하거나 사용할 수 없는 경우가 있는데


특히 소켓통신과 같이 별도의 쓰레드를 돌리는 경우 자주 발생한다.


(구분 편의상 코코스를 사용하는 쓰레드를 코코스 쓰레드, 새로 생성한 쓰레드를 서브 쓰레드라고 지칭하겠음.)


기존 2버전에서는 서브 쓰레드에서 코코스 오브젝트 작업을 할때 작업할 내용을 큐에 집어 넣고 코코스 쓰레드에서 빼와서 처리하는 식으로 했다고 하는데(2버전으로는 작업 안해봐서 모르겠음)


3버전에 들어와서는 Scheduler::performFunctionInCocosThread 메소드가 추가되었다.


메소드 명에서 보는 것처럼 서브 쓰레드에서 특정한 함수를 코코스 쓰레드에서 실행하게 하는 메소드 이다.


사용방법은 아래와 같음.


1. 메소드 호출 시

void ClassName::Method1() { auto scheduler = cocos2d::Director::getInstance()->getScheduler(); scheduler->performFunctionInCocosThread(CC_CALLBACK_0(ClassName::Method2, this)); } void ClassName::Method2() { //코코스 쓰레드로 실행할 내용 }

2. 람다함수 사용 시

void ClassName::Method1() { auto scheduler = cocos2d::Director::getInstance()->getScheduler(); scheduler->performFunctionInCocosThread([](void) -> void { //코코스 쓰레드로 실행할 내용 }); }