本页内容

QtTaskTree::When Class

class QtTaskTree::When

一种会延迟主体执行,直至屏障推进的元素。更多...

标题: #include <qbarriertask.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
自: Qt 6.11
状态: 技术预览

该类处于技术预览阶段,内容可能会有变动。

注意:本类中的所有函数均为可重入函数。

公共函数

When(const QtTaskTree::BarrierKickerGetter &kicker, QtTaskTree::WorkflowPolicy policy = WorkflowPolicy::StopOnError)
When(const QtTaskTree::QCustomTask<Task, Adapter, Deleter> &customTask, Signal signal, QtTaskTree::WorkflowPolicy policy = QtTaskTree::WorkflowPolicy::StopOnError)
When(QtTaskTree::When &&other)

详细说明

用于延迟Do 主体的执行,直到相关的QStoredBarrier 被推进或QCustomTask 的信号被发出。它与Do 元素结合使用,例如:When () >> Do {} 。

另请参阅 Do 。

成员函数文档

[explicit] When::When(const QtTaskTree::BarrierKickerGetter &kicker, QtTaskTree::WorkflowPolicy policy = WorkflowPolicy::StopOnError)

创建一个延迟元素,接收参数kicker ,并返回ExecutableItem ,用于与Do 主体并行执行。Do 主体将被延迟,直到传递给kicker 的QStoredBarrier 被推进。由kicker 返回的ExecutableItem 以及Do 主体将使用policy 并行执行。

例如,若要延迟后续任务的执行,直到QProcess 启动,该配方可设计如下:

const auto kicker = [](const QStoredBarrier &barrier) {
    const auto onSetup = [barrier](QProcess &process) {
        QObject::connect(&process, &QProcess::started, barrier.activeStorage(), &QBarrier::advance);
        ... // Setup process program, arguments, environment, etc...
    };
    return QProcessTask(onSetup);
};

const Group recipe {
    When (kicker) >> Do {
        delayedTask1,
        ...
    }
};

当执行上述配方时,QTaskTree 会与Do 主体并行运行QProcessTask 。Do 主体最初处于暂停状态——它将在传递给kicker的barrier前进后继续执行。这将在QProcess 启动后立即发生。此后,QProcess 将与Do 主体并行运行。

另请参阅 Do 。

[explicit] template < typename Task, typename Adapter, typename Deleter, typename Signal > When::When(const QtTaskTree::QCustomTask<Task, Adapter, Deleter> &customTask, Signal signal, QtTaskTree::WorkflowPolicy policy = QtTaskTree::WorkflowPolicy::StopOnError)

创建一个延迟元素,将customTask 及其Task 的signal 与Do 主体并行运行。Do 主体将被延迟,直到Task 的signal 被发出。customTask 和Do 主体将使用policy 并行运行。

另一个 When 构造函数中的代码可以简化为:

const auto onSetup = [barrier](QProcess &process) {
    ... // Setup process program, arguments, environment, etc...
};

const Group recipe {
    When (QProcessTask(onSetup), &QProcess::started) >> Do {
        delayedTask1,
        ...
    }
};

注意: 传入的customTask 的Task 类型必须继承自QObject 。

另请参阅 Do 。

[constexpr noexcept default] When::When(QtTaskTree::When &&other)

通过Move构造一个When 实例。

© 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.