cocos2d-x线程通信<STL>

上一篇博客中讲到用msg实现多线程之间的消息传递,因为我只是把网络接收的数据发给主线程,或者主线程有数据需要负责网络的子线程去发送,主程看了我的代码后说我是“杀鸡用了个宰牛的刀”,于是,我并没有使用msg,跨平台不太方便也是一方面的原因。

实现这个功能用STL也是可以的。非常简单,说一下做法,就不写具体的代码了,如果我说的不清楚请评论里留言啦~

假设是主线程要给子线程发送数据,创建一个全局的容器变量(至于用vector还是list或者deque啊就自行决定吧),如果有数据要发送了就把它存到容器中,在子线程中需要一个while(true)的循环,一直去读这个容器中有没有数据,有就读出来(注意要把数据取出来),没有就继续循环。特别强调的是不论是主线程还是子线程对容器的访问都是要加锁的。我暂时是这么实现的~

如果是子线程给主线程发消息就不能使用while(true)了,否则UI显示会在while循环里卡住的,我的实现是子线程用notificationcenter给主线程发送一个消息,然后主线程从容器中读取数据。

也向王哲大神请教过线程通信这个问题,下面贴出他给出的建议

多线程方面的消息传递方面,目前cocos没有封装这块。你可以参考标准的“生产者-消费者模型”来实现。网上可以搜到很多实现。另外,我在2.x版本里面的写的 https://github.com/cocos2d/cocos2d-x/blob/master/extensions/network/HttpClient.cpp 这个也可以参考一下,没有做很纯粹的封装,不过用 CCArray 做了两个队列,在网络和UI线程里面分别用pthread_mutex_lock/unlock 加锁解锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值