【玩转cocos2d-x之二十一】多线程和同步01-pthread库

【玩转cocos2d-x之二十一】多线程和同步01-pthread库,第1张

概述原创作品,转载请标明:http://www.voidcn.com/article/p-xryantaz-ep.html 和其他框架一样,cocos2d-x允许我们使用多线程进行编程。cocos2d-x v2.2.0使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上。 1.配置 在使用pthread之前,需要把头文件和库文件链接进来。pthread的官网戳这里,当然cocos2

原创作品,转载请标明:http://www.jb51.cc/article/p-xryantaz-ep.html


和其他框架一样,cocos2d-x允许我们使用多线程进行编程。cocos2d-x v2.2.0使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上。


1.配置

在使用pthread之前,需要把头文件和库文件链接进来。pthread的官网戳这里,当然cocos2d-x帮我们包含进引擎了。


1.1.头文件

pthread.h放在\cocos2d-x目录\cocos2dx\platform\third_party\win32\pthread\下,右键项目→属性→配置属性→C/C++→附加包含目录添加如下,这里要注意附加包含目录是只包含当前目录下的文件,而不会包含该目录下子目录。



1.2.库文件

一样的,右键项目→属性→配置属性→链接器→输入→附加依赖项,添加pthreadVCE2.lib即可。v2.2.0会自动包含,这步可省。


2.pthread库


2.1.主要功能

pthread库包含了四大部分功能:

(1)Thread Management:线程管理。提供了线程的创建,删除,结束等功能,也包含了对线程属性的修改和设置。

(2)Mutexex:互斥对象。用于处理同步机制。提供了创建,销毁,加锁,解锁等功能,也包含了对互斥对象属性的修改和设置。

(3)Condition variables:条件变量。提供了基于程序员提供条件的进程间通讯互斥锁的 *** 作,包含了对其属性的修改和设置。

(4)Synchronization:同步相关。提供了 *** 作读写锁等功能。


2.2.命名规则



3.线程和互斥对象

我们这里主要了解线程和互斥对象,也是最常用到的。


3.1.线程

[cpp] view plain copy //创建线程 PTW32_DLLPORTintPTW32_CDECLpthread_create(pthread_t*tID, constpthread_attr_t*attr, voID*(*start)(voID*),153); Font-weight:bold; background-color:inherit">voID*arg); //退出线程 PTW32_DLLPORTvoIDPTW32_CDECLpthread_exit(voID*value_ptr); //取消执行线程 PTW32_DLLPORTintPTW32_CDECLpthread_cancel(pthread_tthread); //删除线程 intPTW32_CDECLpthread_detach(pthread_ttID); //加入线程 intPTW32_CDECLpthread_join(pthread_tthread,153); Font-weight:bold; background-color:inherit">voID**value_ptr); //初始化线程属性 intPTW32_CDECLpthread_attr_init(pthread_attr_t*attr); //清理线程属性 intPTW32_CDECLpthread_attr_destroy(pthread_attr_t*attr);
3.2.互斥对象

//初始化mutex intPTW32_CDECLpthread_mutex_init(pthread_mutex_t*mutex,153); Font-weight:bold; background-color:inherit">constpthread_mutexattr_t*attr); //销毁mutex,要注意如果是new的指针,需要手动释放,pthread_mutex_destroy并不会帮你释放 intPTW32_CDECLpthread_mutex_destroy(pthread_mutex_t*mutex); //加锁 intPTW32_CDECLpthread_mutex_lock(pthread_mutex_t*mutex); //尝试加锁 intPTW32_CDECLpthread_mutex_trylock(pthread_mutex_t*mutex); //解锁 intPTW32_CDECLpthread_mutex_unlock(pthread_mutex_t*mutex); 要注意的是mutex变量必须要被声明为pthread_mutex_t类型,且在使用前必须要被初始化,初始化有2种方式:

(1)静态初始化

pthread_mutex_tmymutex=PTHREAD_MUTEX_INITIAliZER; (2)动态初始化
pthread_mutex_init();
4.注意

cocos2d-x使用多线程应注意的问题(来自官方文档):


(1)不能调用涉及到CCObject::retain(),CCObject::release() 或者 CCObject::autorelease()的函数,因为CCautoreleasePool不是线程安全的。因为cocos2d-x框架中无处不在使用CCautoreleasePool,所以建议不要在新线程中调用cocos2d-x的API。


(2)如果要在新线程中加载资源,那么可以使用CCTextureCache::addImageAsync()。


(3)pthread_cond_wait()看起来有个BUG,首次wait会失败,但是之后又会工作的很好。

(4)OpenGL context也不是线程安全。

总结

以上是内存溢出为你收集整理的【玩转cocos2d-x之二十一】多线程和同步01-pthread库全部内容,希望文章能够帮你解决【玩转cocos2d-x之二十一】多线程和同步01-pthread库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1065408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存