位置: 编程技术 - 正文

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

发布时间:2024-02-27
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教程)

  • 发票冲红重开,重开时是按新税率还是旧税率
  • 医疗批发企业增值税税负率大概是多少
  • 所得税分录是怎么计算的
  • 个人所得税计提分录怎么写
  • 国内旅客运输票据
  • 发票右上角打印缺数字
  • 小企业汇算清缴所得税会计分录
  • 低于5000是什么意思
  • 以前年度少计提费用
  • 铲车用什么燃油
  • 应收票据贴现的含义
  • 购销商品分类核算方法有
  • 房地产开发资质管理办法
  • 原材料做成库存会计分录
  • 跨县提供建筑服务增值税申报
  • 纳税人必知的十七项增值税开票指南
  • 股东贷款企业贷债务
  • 如何检验发票真伪
  • 扣收贷款本息
  • 个人转让股权的合理费用都有哪些
  • 找私人买东西不发货算诈骗吗
  • 如何使用U盘启动盘进行分区
  • u盘启动盘如何分区
  • 账面价值,账面净值,账面余额
  • 私账的钱怎么弄到公账
  • 小规模纳税人两费减免
  • 母公司给子公司拨款要交税吗
  • 办公家具折旧年限及计算方法
  • 百度有钱花借钱会上征信吗
  • 招财树的养殖方法
  • win11 zen2
  • PHP:Memcached::flush()的用法_Memcached类
  • 如何获取openai api
  • 企业对外捐赠扣除标准有哪些?
  • 公司承担的社保公积金怎么做账
  • 房产税和土地使用税征税对象
  • 年终奖发放管理制度
  • 销售方怎么申请红字信息表
  • 政府奖励怎么做账
  • 公司购置办公楼自用
  • yolov5输出result
  • 期初未缴纳税额怎么计算
  • matlab绘图总结
  • 异地开办分公司流程
  • 微信php开发包
  • 子公司破产对母公司是利好还是利空
  • vue router-view路由详解
  • 累计预扣法的适用条件
  • 社会团体税收政策
  • 母子公司之间的租赁房屋
  • 免增值税项目可以抵扣吗
  • python中input转换
  • 企业投资一个小时多少钱
  • 企业所得税汇算清缴扣除标准2023
  • 金蝶专业版仓库管理怎么结账
  • 企业股东分红是按会计利润还是税务利润
  • 进出口代理的账务怎么做
  • 供应商费用是什么
  • 6月工资7月发8月申报
  • 交强险还用开车去吗
  • 社保补缴收滞纳金吗
  • 未发货未收款先开具发票怎么账务处理
  • windows图片密码
  • xp系统怎么更改用户权限
  • xp安装磁盘格式
  • windows8使用技巧
  • linux who am i
  • 激活 win7
  • win7系统无法更改账户名称
  • Win10 Mobile 14283红石预览版有哪些机型可以安装?
  • python中scatter函数
  • dos命令可以做什么
  • 关于javascript的说法
  • js闭包详解
  • jquery.filedownload.js
  • 2006年发生哪一些大案
  • 企业年度总收入指的是什么意思
  • 累计计税金额是怎么得出
  • 地税公职律师招聘
  • 国税局对出口退税的要求
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号