Cocos2d-X多线程(3) cocos2dx中的线程安全

本文探讨了在Cocos2d-X 3.0中处理线程安全的方法,重点介绍了Scheduler类的performFunctionInCocosThread()函数。该函数用于确保在其他线程中安全地执行cocos2d操作。通过示例代码展示了如何在线程中使用此函数,并提醒注意线程结束与函数执行顺序以及互斥锁的配合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用多线程时,总会遇到线程安全的问题。cocos2dx 3.0系列中新加入了一个专门处理线程安全的函数performFunctionInCocosThread(),他是Scheduler类的一个成员函数:
void Scheduler::performFunctionInCocosThread(const std::function<void ()> &function)
当在其他线程中调用cocos2d的函数时使用该函数。
使用这个函数就能安全的在其他线程中去控制cocos2dx的一些操作了。比如在worker线程中对精灵的创建等操作可能会没有用,在performFunctionInCocosThread就能很容易实现。
比如:
void thread_fun()
{
  log("new thread create:t_id:0x%x",GetCurrentThreadId());
 
  Director::getInstance()->getScheduler()->performFunctionInCocosThread([&,this]
  {
   for(int i=0;i<=1000;i++){}
   log("[performFunctionInCocosThread] finished!");
  });
 
  log("thread finished:t_id:0x%x",GetCurrentThreadId());
}
这时会看到一个问题,线程结束后performFunctionInCocosThread中运行的代码才结束,这是因为使用performFunctionInCocosThread将参数函数中的代码放到主线程中去运行,所以就无法知道运行完这段代码需要多少时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值