Cocos2d-x开发网络游戏(四) 处理网络线程
来源:互联网 发布:linux启动nginx服务 编辑:程序博客网 时间:2024/06/06 11:03
转自:http://blog.sina.com.cn/s/blog_6084f58801014g0g.html
由于socketcc只开放了以阻塞的形式接收网络数据,所以为避免界面卡死,我们只能选择开线程的方式。其实即使以非阻塞的形式接收网络数据,我们通常也要以开线程的形式来处理网络数据。
既然处理网络数据要开线程,那么我们的网络线程要开在哪里呢?2dx的创始人walzer给出的建议是开在appDelegate中。那么接收到网络数据,分包处理后(关于数据接收,分包可以参考上一篇文章)引出的界面更新问题我们如何去处理,由于界面的更新不能放到线程里去处理,我们要做的是如何把子线程接收处理后的数据放到主线程去更新。这里给出一种思路:客户端网络线程接收包处理后将其封装成事件然后加入事件队列,当然队列封装成什么样子要看你自己处理。然后在主线程中取出队列事件命令进行界面的更新。
下面是实现思路:
1.
class CCQuene;
class NetPackage;
class PublicMsgHandler:public cocos2d::CCNode {
private:
CCQuene * _eventQuene;
private:
MutualExclusion mutexQuene;
pid_t
void
void
public:
PublicMsgHandler();
~PublicMsgHandler();
virtual void update(float fDelta);
void addEvent(NetPackage * netPackage);
};
来看里面的实现:
PublicMsgHandler::PublicMsgHandler(){
}
PublicMsgHandler::~PublicMsgHandler(){
}
void PublicMsgHandler::update(float fDelta){
}
void PublicMsgHandler::addEvent(NetPackage * netPackage){
}
需要注意的是这里使用了资源锁,因为_eventQuene在不同线程执行时很可能发生同时访问,这是如果没有处理,将直接导致崩溃。关于信号量有什么不接大家可以参考操作系统。
2.
我们知道CCNode中实现了update方法,CCNode在调用schedualUpdate后可以实现update调用,当注意有前提,此CCNode必须处于running状态。默认情况下节点加入父节点后就会自动处于running状态。不过可以的是AppDelegate不是继承自CCNode,这样我们就没有办法在此调用update方法。那么那些共有消息如何处理。
别急,有办法。看下PublicMsgHandler的构造函数
PublicMsgHandler::PublicMsgHandler(){
}
在构造函数中我们调用了
this->onEnter();
this->onEnterTransitionDidFini
只要调用这两个方法节点就可以处于运行状态。
3.
bool AppDelegate::applicationDidFinishLaun
{
pMsgHandler=new PublicMsgHandler();
。。。。。。
。。。。
ok,这样游戏就可以接收公共消息并可以实现主线成的更新。对于相应页面的消息处理,你可以同样按PublicMsgHandler的处理方式去处理。
就介绍到这了。
- Cocos2d-x开发网络游戏(四) 处理网络线程
- Cocos2d-x开发网络游戏(四) 处理网络线程
- Cocos2d-x开发网络游戏
- cocos2d-x 开发网络游戏(http post&socket)
- cocos2d-x 开发网络游戏(http post&socket)
- cocos2d-x 开发网络游戏(http post&socket)
- 【Cocos2d-x 游戏开发】HttpClient制作网络游戏
- 2D网络游戏开发(网络篇)(四)
- Cocos2d-x 开发 点击交互的四种处理
- Cocos2d-x 3.0开发 点击交互的四种处理
- Cocos2d-x 3.0开发(三)点击交互的四种处理
- Cocos2d-x 3.0开发(三)点击交互的四种处理
- Cocos2d-x 3.0开发(三)点击交互的四种处理
- Cocos2d-x 3.0开发(三)点击交互的四种处理
- cocos2d-x商业级单机游戏和网络游戏开发系列
- Cocos2d-X游戏开发(四)
- Cocos2d-x笔记(四)CCHttpCleint网络请求
- cocos2d-x 网络编程三(线程的应用)
- 可视化日志分析软件:Logstalgia
- CSS Pseudo-classes & Pseudo-elements
- CodeForces 412E - E-mail Addresses (模拟)
- IT行业三大定律
- android反编译
- Cocos2d-x开发网络游戏(四) 处理网络线程
- 【算法-排序之一】冒泡排序
- ANDROID 完美退出APP的实例代码
- hdu1874 畅通工程续 最短路
- 基于多幅图像的3D重建资料
- ListViewItem 的动画
- 经典面试题分析之Google搜索之星(js实现)
- 理想程序猿与现实程序猿
- 关于学习Linux 编程的基本经典书籍推荐