cocos2d-x线程使用错误修正
来源:互联网 发布:ubuntu 安装php环境 编辑:程序博客网 时间:2024/06/06 12:43
cocos2d-x版本:3.2
1、TextureCache异步加载纹理加锁方式错误
先看源码:
这种加锁方式有小概率会出现执行顺序为1->2->3,造成的后果就是你发起一个异步加载请求,然而并没有什么卵用,代码在3位置等待,你迟迟加载不到需要的纹理,直到再次发起一个异步加载请求时才会解锁_sleepCondition.wait(lk); 看起来又正常了,而你不知道什么时候又会出现上述情况。
修正后代码如下:
void TextureCache::addImageAsync(const std::string &path, const std::function<void(Texture2D*)>& callback){ // ... AsyncStruct *data = new AsyncStruct(fullpath, callback); std::unique_lock<std::mutex> lk(_sleepMutex); _asyncStructQueue->push(data); _sleepCondition.notify_one();}
void TextureCache::loadImage(){ AsyncStruct *asyncStruct = nullptr; while (true) { std::queue<AsyncStruct*> *pQueue = _asyncStructQueue; { std::unique_lock<std::mutex> lk(_sleepMutex); if (_needQuit) { break; } if (pQueue->empty()) { _sleepCondition.wait(lk); continue; } asyncStruct = pQueue->front(); pQueue->pop(); } // ... }}
2、Console异步回调问题
Console类提供了addCommand接口,可以外部插入自定义的命令,然而回调却是在异步线程回调的,例如在lua里调用此接口,异步线程回调lua有可能导致程序崩溃。
解决方法:通过addCommand插入的命令回调函数转回到主线程回调。部分代码如下:
bool Console::parseCommand(int fd)
3、HttpClient有和1同样的错误,解决方法也相同
0 0
- cocos2d-x线程使用错误修正
- 修正 Android cocos2d-x FATAL EXCEPTION: GLThread 105的错误
- cocos2d-x使用cocosbuilder简介(持续修正)
- Cocos2d-x SQLite使用错误
- cocos2d-x配置错误
- cocos2d-x 错误整理
- win7下使用vs2010配置cocos2d x常见错误总结
- cocos2d-x使用瓦片地图出现的错误总结
- cocos2d-x中使用libpomelo编译错误问题
- spriter动画编辑器的cocos2d-x接口修正强化
- cocos2d-x线程通信(msg)
- cocos2d-x线程通信<STL>
- Cocos2d-x 线程的使用及线程使用中遇到的问题
- cocos2d-x 对象定义错误
- cocos2d-x code 254错误
- cocos2d-x 编译错误总结
- 【Cocos2d-x 014】 lnk2019错误
- cocos2d—x 常见错误
- Linux基本操作和vi编辑器
- viewcontrollers 过场动画切换示例(iOS 5)
- Ubuntu下安装Nginx详细步骤
- xcode 错误提示: xxx.png pngcrush caught libpng error:
- 栈的应用举例----数制转换
- cocos2d-x线程使用错误修正
- 得到statusBarHeight, titleBarHeight, DisplayWidth, DisplayHeight:
- linux安装jdk
- python连接msSqlServer
- spring学习笔记(一)
- android paint Xfermode
- 行车路程
- JSON.toJSONString会把key的首字母转成小写
- 链栈的基本操作