gpt4 book ai didi

c++ - cocos2d-x如何支持多线程

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:52 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

    调度器-> performFunctionInCocosThread(CC_CALLBACK_0(YourClass::updateUI, this));

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

关于c++ - cocos2d-x如何支持多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com