Как использовать TBB для запуска функции в одном потоке - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь использовать 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");
  }
}

Кстати, entity - это std::vector<CHandle>, которая является закрытой переменной класса

1 Ответ

0 голосов
/ 05 июля 2018

Вам просто нужно передать лямбду в функцию 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();
...