在本页

QtTaskTree::Do Class

class QtTaskTree::Do

与 For 和 When 结构一起使用的主体元素。更多

头文件: #include <qtasktree.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
Qt 6.11

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

公共函数

Do(const QtTaskTree::GroupItems &children)
Do(std::initializer_list<QtTaskTree::GroupItem> children)

详细说明

一个主体元素,包含一个任务列表,在每次For 迭代或When's barrier 被推进后执行。

For (RepeatIterator(5)) >> Do {
    task1,
    task2
};

如果是 For 循环,Do 的主体将被执行多次。如果onGroupSetup() 或onGroupDone() 处理程序是传递给 Do 的构造函数的子程序的一部分,它们将只被执行一次--在整个循环开始之前和整个循环结束之后:

const RepeatIterator iterator(3);

const auto onSetup = [] { qDebug() << "Setup"; };

const auto onSync = [iterator] { qDebug() << "Current iteration:" << iterator->iteration(); };

const auto onDone = [] { qDebug() << "Done"; };

const Group recipe = For (iterator) >> Do {
    onGroupSetup(onSetup),
    QSyncTask(onSync),
    onDone(onDone)
};

上述代码执行后将输出结果:

Setup
Current iteration: 0
Current iteration: 1
Current iteration: 2
Done

如果要在每次迭代时调用组处理程序,请在 Do 主体中额外添加一个Group ,如:

const Group recipe = For (iterator) >> Do {
    Group {
        onGroupSetup(onSetup),
        QSyncTask(onSync),
        onDone(onDone)
    }
};

后者执行后将输出:

Setup
Current iteration: 0
Done
Setup
Current iteration: 1
Done
Setup
Current iteration: 2
Done

Storage 作为正文的直接子代传递时,也会发生类似情况。存储结构只在整个循环开始前实例化一次,并在整个循环结束后销毁。如果希望每次迭代都有单独的Storage 实例,请用一个额外的Group 包围 Do 主体。

For 循环的 Do 主体中放置parallel 元素时要小心,因为所有迭代都将并行启动。这可能不是我们所希望的,尤其是在ForeverIterator 的情况下。

另请参见 ForWhen

成员函数文档

[explicit] Do::Do(const QtTaskTree::GroupItems &children)

构造一个 Do 主体,其中包含children ,在For 的每次迭代或When 的障碍物前进后执行。

[explicit] Do::Do(std::initializer_list<QtTaskTree::GroupItem> children)

使用children 作为初始化列表构造 Do 主体。

这是一个重载函数。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.