Cocos2d-x is not thread-safe

本文探讨了Cocos2d-x引擎在多线程环境下使用时遇到的问题及解决方案,强调了引擎本身不具备线程安全性,并分享了一种利用CCNotificationCenter和MTNotificationQueue进行跨线程通信的有效实践。

rt,cocos2d-x 不是线程安全的!

在开发一个网络应用的时候,一般会起一个新的线程用于接收服务器端反馈的数据。

不推荐在接收线程中处理接收到的数据,因为可能会引发一些问题,

普遍的做法是把收取到的网络数据抛给主线程做处理。


前次我就遇到了与此相关的问题,在接收线程中我一收到服务器端发过来的数据就做处理了,

(具体来说就是在子线程中为当前场景添加了一个精灵节点)

结果添加的这个精灵竟然没有正常的显示出来!

(经过我多次地测试,找到了一点儿规律:如果精灵所使用的纹理之前有加载过,则能正常显示;反之则显示不正常)


怎么解决这个问题?

接收线程只负责消息的接收,不负责消息的处理。

接收线程将收到的消息派发给主线程进行处理(附带的,OpenGL 也不是线程安全的)。

CCNotificationCenter 和 MTNotificationQueue 能够比较轻松愉快地解决类似的问题,

(在了解这两个东西之前,我一直采用的是 “单例暂存接收到的消息” + “scheduleUpdate持续不断检测” 的方式)

完整的用法目前还不是很了解,有待进一步研究

(总而言之,NotiCenter + NotiQueue 比我所采用的原始的方式是先进了太多了,怎一个爽字了得)。


下面是我在逛论坛的时候看到的,觉得说挺有借鉴价值的

(虽然不太适用于 ccx —— ccx 添加子节点必须在主线程内完成,所以 “处理线程” 是不成立的)

关键是接收和处理哪个更快。

子线程不要既接收又处理,应该分为接收线程和处理线程,

根据接收和处理数据的速度情况分配数量,接收线程和处理线程通过待处理队列来交换信息。

最好做成自适应的,待处理队列增长到一定程度就增加处理线程,减少接收线程;

队列缩减到一定程度就增加接收线程减少处理线程。

用多态来解决不同数据有不同处理的问题。

(橡木疙瘩(u010936098)@优快云)

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值