ru:toolworks:docs:apparatus:operating

Это старая версия документа!


Оперирование

Более новый и функциональный способ оперировать над Цепями через процесс, называемый оперирование (operating).

Можно легко оперировать над Цепями через C++ лямбды и вот как следует это делать:

Chain->Operate([](const FChain::FCursor& Cursor, FMyTrait Trait)
{
    ...
});

Тип курсора должен соответствовать типу использованной цепи (твердотельность/текучесть). Обратите внимание, что вам не позволяется получать ссылку на трейт, если вы итерируетесь по не-твердотельной цепи, - разрешено только копирование. Итак, оперировать над твердотельной Цепью вам следует следующим образом:

SolidChain->Operate([](const FSolidChain::FCursor& Cursor, FMyTrait& Trait)
{
    ...
});

Теперь можете менять свойства (поля) трейта напрямую, без привлечения копирования.

Твердотельные цепи также поддерживают специальный тип оперирования - мультипоточный. К названию функции, которую надо вызвать, по такому случаю подписали Concurrently, и она принимает ещё два аргумента:

  • максимальное количество потоков, выделенных на выполнение задачи, и
  • минимальное число слотов на каждый поток.

Например:

SolidChain->OperateConcurrently([](const FSolidChain::FCursor& Cursor, FMyTrait& Trait)
{
    ...
}, 4, 32);

Второй параметр помогает ограничить количество потоков. Если слишком мало доступных слотов, излишние потоки не понадобятся и они не будут помещены в очередь.

  • ru/toolworks/docs/apparatus/operating.1630527864.txt.gz
  • Последнее изменение: 2021/09/01 23:24
  • jispar