如何使用TBB在单个线程中运行函数

时间:2018-07-05 06:43:57

标签: c++ multithreading tbb

我正在尝试使用TBB仅使用一个线程来运行这段代码,但是我不知道如何继续。

我已经阅读到我应该使用tbb::task_group,但是我不知道如何使用它。

void CScene::load(const std::string &_name) {
  if (!references++) {
   setName(_name);
   Resources.setCurrentScene(my_name);

   TEntityParseContext ctx;
   ctx.name = my_name;
   parseScene("data/scenes/" + my_name + ".scene", ctx);

   dynamic = ctx.dynamic_scene;
   for (CHandle e : ctx.entities_loaded) {
     entities.push_back(e);
   }

   Engine.getScriptingModule().raiseEvent(CModuleScripting::SCENE_LOADED, 
   my_name);

   Resources.setCurrentScene("system");
  }
}

顺便说一句,实体是std::vector<CHandle>,是类的私有变量

1 个答案:

答案 0 :(得分:2)

您只需将lambda传递给task_group::run函数:

CScene cs;
tbb::task_group g;

g.run([&cs]{cs.load("Name");});

// maybe do some other work here

// This function either waits or executes the lambda 
// if no other thread is executing it
g.wait();