【问题标题】:How to support Multi threading in cocos2d-xcocos2d-x中如何支持多线程
【发布时间】:2015-03-11 19:18:27
【问题描述】:

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

【问题讨论】:

    标签: c++ multithreading pthreads cocos2d-x


    【解决方案1】:

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

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

      自动调度器 = Director::getInstance()->getScheduler();

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

    这里的updateUI 函数在YourClass 中定义将负责执行UI 相关的操作。

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2011-12-17
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多