時間のかかる処理だからバックグラウンドで処理して、終わったらメインスレッドで処理したい。
そんなcocos2d−xプログラマーの願いを叶えるプログラムが、
http://t-kashima.hateblo.jp/entry/2014/07/10/021715
t-kashimaさん、ありがとうございます。
auto th = std::thread([](){
// ここで重い処理
Director::getInstance()->getScheduler()->performFunctionInCocosThread([](){
// この中はメインスレッド
});
});
th.detach();
th.detach();を忘れるとスレッドのエラー出るよ。
こんな感じの
\#0 0x00007fff88df8212 in __pthread_kill ()
ちなみに、メインループ外のメモリ管理は面倒です。
(ObjCではメインループじゃないとautoreleaseが効かなかったりしたし)
なので、ラムダのキャプチャの部分([]でくくる部分)はできるだけコピーにした方がいいと思われる。(つまり[&]とかは避ける)