cocos2dx3.4的多线程bug严重
2015-08-26 10:32
369 查看
这几天发现了两个bug,都是多线程的。
1。视频播放器中android方面,Cocos2dxVideoHelper中虽然用了Handler保证播放指令在主线程UI中顺序异步执行,但是还有个问题,就是_createVideoView的时候,有时候主线程方面先进入Cocos2dxVideoView的onMeasure方法,导致设置Cocos2dxVideoView的宽度和高度为0,Cocos2dxVideoView不显示,后来虽然在2dx线程中有设置Cocos2dxVideoView宽度和高度,但是已经没有用了,因为不显示,所以surfaceCreated()方法不执行,播放器不能初始化,播放不了视频。此时解决的方法是在Cocos2dxVideoView的setVideoRect()方法中执行
requestLayout();
invalidate();
来重新布局,激活surfaceCreated()方法。
2。异步加载图片资源卡死问题。
异步加载中,当加载完一张图片,再加载下一张,通过回调再来加载下一张。具体使用到的函数是
Director::getInstance()->getTextureCache()->addImageAsync(texturePath.c_str(), CC_CALLBACK_1(DNLoadingLayer::loadCallBack, this));
在addImageAsync中有_sleepCondition.notify_one()通知异步线程加载。
异步线程中如果没有加载任务,则进入_sleepCondition.wait等待函数。
理论上顺序是这样的,加载完一张图片后,异步线程中则快速进入_sleepCondition.wait等待函数,但是有时候,几率很小,异步线程并没有那么快,主线程则快速发送一个异步加载指令,首先调用了_sleepCondition.notify_one()函数,导致异步线程无法得到通知而卡死。
呵呵
1。视频播放器中android方面,Cocos2dxVideoHelper中虽然用了Handler保证播放指令在主线程UI中顺序异步执行,但是还有个问题,就是_createVideoView的时候,有时候主线程方面先进入Cocos2dxVideoView的onMeasure方法,导致设置Cocos2dxVideoView的宽度和高度为0,Cocos2dxVideoView不显示,后来虽然在2dx线程中有设置Cocos2dxVideoView宽度和高度,但是已经没有用了,因为不显示,所以surfaceCreated()方法不执行,播放器不能初始化,播放不了视频。此时解决的方法是在Cocos2dxVideoView的setVideoRect()方法中执行
requestLayout();
invalidate();
来重新布局,激活surfaceCreated()方法。
2。异步加载图片资源卡死问题。
异步加载中,当加载完一张图片,再加载下一张,通过回调再来加载下一张。具体使用到的函数是
Director::getInstance()->getTextureCache()->addImageAsync(texturePath.c_str(), CC_CALLBACK_1(DNLoadingLayer::loadCallBack, this));
在addImageAsync中有_sleepCondition.notify_one()通知异步线程加载。
异步线程中如果没有加载任务,则进入_sleepCondition.wait等待函数。
理论上顺序是这样的,加载完一张图片后,异步线程中则快速进入_sleepCondition.wait等待函数,但是有时候,几率很小,异步线程并没有那么快,主线程则快速发送一个异步加载指令,首先调用了_sleepCondition.notify_one()函数,导致异步线程无法得到通知而卡死。
呵呵
相关文章推荐
- Cocos2d-x场景功能描述的生命周期
- cocos2dx3.X shader使图片置灰
- Cocos2d-x 多分辨率屏幕适配
- Cocos2d-x 移植到 Windows10 环境搭建
- 【Cocos2dx】使用CCControlButton创建按钮、按钮点击事件,点击事件中的组件获取,setPosition的坐标问题
- 于Eclipse在建筑cocos2d-x的Android开发环境(避免cygwin)
- 在cocos2dx中实现水波滤镜 .
- cocos2d-x 3.X中Sprite背景图片自动拉伸适应屏幕
- 基于cocos2dx 2.x做的一些shader效果Demo .
- cocos2d-x中Sprite的自动拉伸,适应屏幕
- Cocos2dx实现精灵的加速(适用于塔防游戏)
- cocos2dx 3.6 引入sqlite3数据库模块
- cocos2dx中的Director类中的getInstance()方法解析,即单例模式
- 关于cocos2dx如何绑定c++的静态方法和类给lua调用
- cocos2d-x 3.x 中文乱码问题解决
- cocos2d-x 自带11种粒子特效
- cocos2d-js游戏设计常用函数笔记
- cocos AssetsManagerEX
- cocos2d js layer定义扑克放在scene中,修改layer中图片,layer响应点击函数
- Cocos2d-x中,如何更快地加载大量重复粒子