GroupItem 类

class Tasking::GroupItem

GroupItem 表示可能是任何 Group 组成部分的基本元素。 更多信息...

头文件 #include <solutions/tasking/tasktree.h>
继承自

Tasking::ExecutableItem

注意: 该类中所有函数都是 可重入的

公开类型

公开函数

GroupItem(const Tasking::Storage<StorageStruct> &storage)
GroupItem(const QList<Tasking::GroupItem> &items)
GroupItem(std::initializer_list<Tasking::GroupItem> items)

详细说明

GroupItem 是可能作为任何 Group 组成部分的基本元素。它封装了任何 GroupItem 子类提供的功能。它是一个值类型,即使它是通过子类的构造函数最初创建的,也可以安全地复制 GroupItem 实例。

GroupItem 有四种主要类型

GroupItem 类型简要描述
CustomTask定义异步任务类型以及任务的启动、完成和错误处理器。用一个独特的任务名称别名,例如,ConcurrentCallTask<ResultType>NetworkQueryTask。异步任务是使用任务树的主要原因。
Group其他 group 项的容器。由于组是 GroupItem 类型,它可以嵌套在另一个组内部。组被视为其父级中的一个单独的异步任务。
包含 Storage 的 GroupItem使组的孩子任务能够交换数据。当包含 Storage 的 GroupItem 放入组内时,任务树在进入组之前实例化存储的数据对象,并在离开组后销毁它。
其他组控制项parallelLimit() 或 workflowPolicy() 返回的项影响组的行为。由 onGroupSetup() 或 onGroupDone() 返回的项定义了在组开始或结束执行时调用的自定义处理器。

成员类型文档

[别名] GroupItem::GroupDoneHandler

std::function<DoneResult(DoneWith)>DoneResult 提供类型别名。

GroupDoneHandleronGroupDone() 元素的参数。任何具有上述签名的函数,当作为组完成处理器传递时,将在组执行结束时由正在运行的任务树调用。

DoneWith 参数是可选的,您的完成处理器可以省略它。如果提供,它包含有关将被报告给父级的组最终结果的信息。

返回的DoneResult值是可选的,您的处理器可以返回void。在这种情况下,组的最终结果将与DoneWith参数指示的值相等。当处理器返回DoneResult值时,组的最终结果可能被返回值在done处理器体内的返回值调整。

对于DoneResult类型的GroupDoneHandler,不执行额外处理,组将无条件地结束,使用传递的DoneResult值,忽略组的作业策略。

另请参阅 onGroupDone(),GroupSetupHandler,和CustomTask::TaskDoneHandler

[别名] GroupItem::GroupSetupHandler

类型别名,为std::function<SetupResult()>

GroupSetupHandleronGroupSetup()元素的参数。任何具有上述签名的函数,当以组设置处理器形式传递,将在组执行启动时由运行任务树调用。

处理器的返回值指示在处理器调用完成后运行组应如何继续。默认返回值SetupResult::Continue指示组继续运行,也就是说,开始执行其子任务。返回值SetupResult::StopWithSuccessSetupResult::StopWithError指示组跳过子任务的执行并于成功或错误立即结束。

当返回类型为SetupResult::StopWithSuccessSetupResult::StopWithError时,组的done处理器(如果有提供)将被立即同步调用。

注意: 即使组设置处理器返回StopWithSuccessStopWithError,组的done处理器也会被调用。这种行为与任务完成处理器的行为不同,未来可能会改变。

onGroupSetup()元素还接受缩写形式的std::function<void()>函数,即返回值为void。在这种情况下,假定返回值为SetupResult::Continue

另请参阅 onGroupSetup(),GroupDoneHandler,和CustomTask::TaskSetupHandler

成员函数文档

template <typename StorageStruct> GroupItem::GroupItem(const Tasking::Storage<StorageStruct> &storage)

构造一个包含storage对象的GroupItem元素。

当运行任务树进入包含此GroupItem的Group元素时,会动态创建一个StorageStruct实例。

当组即将在执行后离开,先前实例化的StorageStruct将被删除。

可从父元素 Group 的任何处理程序主体内部,包括嵌套组和其任务,通过 Storage::operator->(),Storage::operator*() 或 Storage::activeStorage() 方法访问动态创建的 StorageStruct 实例。

另请参阅存储

GroupItem::GroupItem(const QList<Tasking::GroupItem> &items)

使用给定 items 列表构建一个 GroupItem 元素。

当这个 GroupItem 元素被 TaskTree 解析时,它只是简单地用其 items 替换。

当构造包含 GroupItem 元素列表的 Group 元素时,此构造函数很有用。

static QList<GroupItems> getItems();

...

const Group root {
    parallel,
    finishAllAndSuccess,
    getItems(), // OK, getItems() list is wrapped into a single GroupItem element
    onGroupSetup(...),
    onGroupDone(...)
};

如果您想创建子树,请使用 Group

注意:不要将此 GroupItemGroup 元素混淆,因为 Group 在被任务树解析后保持其子集嵌套,而此 GroupItem 不进行嵌套。

另请参阅Group

GroupItem::GroupItem(std::initializer_list<Tasking::GroupItem> items)

这是一个重载函数。

另请参阅GroupItem(const QList<Tasking::GroupItem> &items)。

©版权所有 Qt 公司 Ltd。 本文档的贡献者的文档版权属于他们自己。本处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款授予的。Qt 及其相应的标志是芬兰 Qt 公司及其全球子公司和其他国家的商标。所有其他商标均为各自所有者的财产。