最近在使用多线程加载资源时遇到了一处崩溃
auto func = [=]{
if (loadXmlSec()){
CCLOG("load***xml***suc");
}
};
auto pt = std::thread(func);
pt.detach();
经查崩溃的原因是在loadXmlSec函数中有继承自cocos2d::Ref的类调用create方法,create中会调用autorelease,但是autorelease是非线程安全的,会造成autoreleasepool容器崩溃,因此需要把调用create的操作放到主线程中。
子线程调用主线程的方法
auto lFx = [=]{
//******
};
Director::getInstance()->getScheduler()->performFunctionInCocosThread(lFx);