位置: 编程技术 - 正文

cocos2d基础学习--多线程使用及线程同步(cocos2d-x教程)

编辑:rootadmin
cocos2d-x 多线程以及线程同步

推荐整理分享cocos2d基础学习--多线程使用及线程同步(cocos2d-x教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2dx4.0入门,cocos2djs,cocos2d教程,cocos2d教程,cocos2d-x教程,cocos2dx4.0入门,cocos2d教程,cocos2d教程,内容如对您有帮助,希望把文章链接给更多的朋友!

cocos2d-x引擎在内部实现了一个庞大的主循环,每帧之间更新界面,如果耗时的操作放到了主线程中,游戏的界面就会卡,这是不能容忍的,游戏最基本的条件就是流畅性,这就是为什么游戏开发选择C&#;&#;的原因。另外现在双核手机和四核手机越来越普遍了,是时候使用多线程来挖掘硬件的潜力了。

1.环境搭建

cocos2d-x中的多线程使用pthread就可以实现跨平台,而且也不是很难理解。使用pthread需要先配置一下工程。右击工程----->属性----->配置属性---->链接器----->输入---->附加依赖项中添加pthreadVCE2.lib,如下图

接着添加附加包含目录,右击项目,属性----->C/C&#;&#;---->常规----->附加包含目录加入pthread头文件所在的目录

这样,环境就搭建起来了。

2.多线程的使用

使用pthread来实现多线程,最重要的一个函数是

在HelloWorldScene.h文件中

定义了两个函数和两个线程的标识。

然后自定义了一个类,用于给线程传递数据。Student类如下:

源文件如下

在退出菜单的回调函数中启动两个线程:

cocos2d基础学习--多线程使用及线程同步(cocos2d-x教程)

可以看到,将Student的指针传递给了pidrun线程,那么在pidrun线程中获得Student信息如下:

3.线程同步

使用了线程,必然就要考虑到线程同步,不同的线程同时访问资源的话,访问的顺序是不可预知的,会造成不可预知的结果。

这里使用pthread_mutex_t来实现同步,下面我来演示一下使用多线程实现卖票系统。卖票的时候,是由多个窗口同时卖票,这里要做到一张票不要卖出去两次,不要出现有票却无法卖的结果。

在线程函数th_run和th_go中来卖票,票的数量是一个全局变量,每卖出去一张票,就将票的数量减一。其中同步的pthread_mutex_t也是一个全局变量,就用它来实现线程同步。

mutex被锁定后,其他线程若再想锁定mutex的话,必须等待,当该线程释放了mutex之后,其他线程才能锁定mutex。Sleep()函数可以使得该线程休眠,单位是毫秒。下面是卖票的结果:

可以看到,这个打印结果正确无误。如果不加mutex会是什么样的结果呢,我将线程同步的mutex注释掉,输出的结果为:

可以看到,有的票卖了两次,有的票就没卖。

4.注意

1.Sleep()函数是使得线程休眠的函数,这个函数不跨平台,仅仅在windows上能用,其他平台使用usleep。

2.在非主线程中不能使用cocos2d-x管理内存的CCObject::retain(), CCObject::release() 者CCObject::autorelease(),因为CCAutoreleasePool不是线程安全的,OPENGL的上下文也不是线程安全的,所以不要再非主线程中使用cocos2d-x的API和UI操作。

转自:

Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 2 本文是使用Cocos2D3.x开发横版动作游戏系列教程的第二篇,同时也是最后一篇。是对HowToMakeASide-ScrollingBeatEmUpGameLikeScottPilgrimwithCocos2D–Part2的翻译,加上

如何在Android平台上使用JS直接调用Java方法 来源:

[置顶] 【零起步开发Cocos2dx-3.x-王牌飞行员(三)】素材文件的制作 ------原创博客,转载请注明出处:

标签: cocos2d-x教程

本文链接地址:https://www.jiuchutong.com/biancheng/369155.html 转载请保留说明!

上一篇:Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 1(cocos2djs)

下一篇:Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 2(cocos2dx4.0教程)

  • 所得税分录是怎么计算的
  • 厂房自用和出租税收区别
  • 加工承揽属于劳务关系吗
  • 研发费用明细账
  • 税控服务费全额抵扣增值税申报表中哪一栏
  • 金蝶软件制造费用结转步骤
  • 年末结转增值税之后增值税有余额嘛
  • 支票取现的用途
  • 非在职员工是什么意思
  • 喷绘广告公司税率是多少
  • 银行手续费可以抵扣企业所得税吗
  • 职工福利费发票开票范围
  • 红字信息表没有编号
  • 小规模纳税人定额发票怎么报税
  • 研究开发费用扣除标准
  • 奖金收入纳税
  • 登陆对话框不能输入
  • win10电脑如何设置锁屏时间
  • redhat5.6安装
  • 创业补贴的作用
  • 银行对公中收
  • unc方式
  • 变动成本法计算营业利润
  • 环境检测费做什么科目
  • 小微企业免征增值税政策2023
  • php登录注册
  • 物资销售收入
  • php数据统计分析
  • php使用自定义函数编程求半径r的圆的周长和面积
  • 分布式网络爬虫
  • 玩转ChatGPT:中科院ChatGPT Academic项目部署与测评
  • 现代信号处理张贤达pdf
  • set命令用法
  • 检测命令
  • 自查补缴增值税附表一怎么填写
  • 公司财务人员岗位职责
  • 支付广告费没有票怎么入账
  • 预收账款多好还是少好
  • 企业出租无形资产使用权取得的收入应计入
  • 出售固定资产的损失计入什么科目
  • 影响留存收益变动的选折题
  • 一般纳税人报税时间每月的多少号
  • 研发人员工资加计扣除以实发
  • 消费税会计处理的设置
  • 所得税的汇算清缴日在资产负债表日后期间
  • 普通发票可以扣除吗
  • 企业所得税退还账务处理
  • 公司注销其他应付款怎么冲平
  • 企业征收所得税会计分录
  • 计提医疗保险费的会计分录
  • 提取安全生产费用是什么意思
  • 凭空多出来的原材料的账务处理?
  • 补缴增值税的会计处理
  • 民非企业附加税计提和缴纳分录
  • 建账时应注意的事项有
  • 商业企业发出商品的核算方法
  • 自增字段必须是主键吗
  • MySQL thread_stack连接线程的优化
  • mac怎么自定义桌面图标
  • spamsub.exe - spamsub进程是什么文件
  • shwicon.exe - shwicon是什么进程 有什么用
  • Unity3D & Java 基于 Protobuf 通信实现
  • excel嵌入图片变成代码怎么办
  • Nodejs+express+html5 实现拖拽上传
  • css行与行之间的间距怎么调
  • perl and
  • perl 运算
  • easyui折叠面板默认折叠
  • js中的$是什么意思
  • JQuery.validationEngine表单验证插件(推荐)
  • jquery截取字符串的方法
  • node.js使用教程
  • 设计模式具有的优点
  • JavaScript弹出窗口
  • 面试java基础知识
  • python 字典的字典
  • fragment生命周期图
  • 深圳2021纳税
  • 武汉市国税局局长黄英简历
  • 公寓限购是好事吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设