资料1:pthreads官网 https://computing.llnl.gov/tutorials/pthreads/ 各种api,各种例子
资料2:http://www.ityran.com/archives/3536
1.不要调用任何会引起CCObject::retain()
,CCObject::release()
或者 CCObject::autorelease()
的方法,因为CCAutoreleasePool并不是线程安全。更多详细介绍请参照“Reference Count and AutoReleasePool in Cocos2d-x(cocos2d-x中的引用计数和自动释放池)”。在Cocos2d-x引擎中,CCAutoreleasePool的使用无处不在,所以我的建议就是:不要在新线程中点用任何cocos2d-x API除了数据结构。
2.如果你想要在新线程中加载资源,你可以调用CCTextureCache::addImageAsync()
PS:
2014.01.07 花了2天的时间,研究了一下CCTextureCache::addImageAsync()的源代码,又用了两天参考它实现了自己的SocketThread,学无止境!
3. pthread_cond_wait()
似乎有bug,首次执行时并不能正常等待,但是,后续可以很好的工作。
如果我们确保retain(), release() 和 autorealese()是线程安全的,那么线程互斥就变得必须。因为cocos2d-x框架会在每个消息循环(message loop)最后释放自动释放池,使用线程互斥会引起性能问题。
顺便说一下,OpenGL上下文(OpenGL context)并不是线程安全的,这个你应该永远记住。
pthread
和
pthread_mutex_t
来创建网络线程。你可以看看使用示例。
资料3:
【玩转cocos2d-x之二十二】多线程和同步02-售票 http://blog.csdn.net/jackystudio/article/details/14118939
【Cocos2d-x游戏引擎开发笔记(23)】多线程以及线程同步 http://blog.csdn.net/zhy_cheng/article/details/9116479 这个应该是借鉴了上面的例子
原文的例子是win32下的,mac下需要:
1)#include "pthread.h"
2)Sleep(1),改成 sleep(1)
3)自己新建Student.h 和studeng.cpp
资料4:
【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载 http://blog.csdn.net/jackystudio/article/details/15334159