如何在cocos2d-x中支持多线程

时间:2015-03-11 19:18:27

标签: c++ multithreading pthreads cocos2d-x

我使用的是cocos2d-x V3.4,我仍然找不到如何使用多线程的好例子。我使用pthread作为工作线程来做一些后台处理。从pthread中,我触发一些自定义事件(Director :: getInstance() - > getEventDispatcher() - > dispatchEvent(& evt);)来更新UI。只要触发的事件发生,就可以正常工作不向UI添加任何图形(addChild)。移动的精灵周围看起来没有任何问题。但是一旦pthread触发了一个需要添加ui节点的事件(EventCustom)(在我的情况下是DrawNode),我会得到一个黑屏。从我在网上找到的东西,pthread不应该发射那些事件。他只需填写事件队列并安排从UIThread中提取这些事件进行渲染。我所做的是将std :: vector作为单例类GameManager的成员。我的pthread推送到那个列表。我安排从该列表中拉出来。但我的应用程序一直在崩溃。所以我很确定我所做的不是正确的方法。

1 个答案:

答案 0 :(得分:5)

UI相关的东西必须在cocos线程上执行,否则根据我的经验可能会导致未定义的行为。 您可以尝试以下步骤:

  1. 创建一个将在特定事件上执行所需UI相关内容的函数
  2. 调用pthread中的方法在cocos线程上执行,如下所示:

    auto scheduler = Director :: getInstance() - > getScheduler();

    scheduler-> performFunctionInCocosThread(CC_CALLBACK_0(YourClass :: updateUI,this));

  3. YourClass 中定义的 updateUI 函数将负责执行与UI相关的操作。