CustomTask 类
template <typename Adapter> class Tasking::CustomTask一个用于声明自定义任务项及其设置和完成处理器的类模板。点击更多...
头文件 | #include <solutions/tasking/tasktree.h> |
继承 | Tasking::ExecutableItem |
注意: 此类中所有函数都是 可重入的。
公共类型
公共函数
CustomTask(SetupHandler &&setup = TaskSetupHandler(), DoneHandler &&done = TaskDoneHandler(), Tasking::CallDoneIf callDoneIf = CallDoneIf::SuccessOrError) |
详细描述
描述任务树食谱中的自定义任务项。
使用给定 TaskAdapter 子类作为模板参数的 CustomTask
模板,将自定义任务名称别名化为唯一的名称。例如,ConcurrentCallTask<T>
是一个别名,指向定义为与 ConcurrentCall<T>
一起工作的 CustomTask
。以下表格包含示例自定义任务及其关联的任务类
别名任务名称(任务空间) | 关联的任务类 | 简要描述 |
---|---|---|
ConcurrentCallTask<ReturnType> | ConcurrentCall<ReturnType> | 启动一个异步任务。在单独的线程中运行。 |
NetworkQueryTask | NetworkQuery | 发送网络查询。 |
TaskTreeTask | TaskTree | 启动一个嵌套的任务树。 |
TimeoutTask | std::chrono::milliseconds | 启动计时器。 |
WaitForBarrierTask | MultiBarrier<Limit> | 启动一个等待屏障通过的异步任务。 |
成员类型文档
[别名]
CustomTask::Deleter
任务与其关联的自定义任务 Adapter
的类型删除器的类型别名。
[别名]
CustomTask::Task
任务与其关联的自定义任务 Adapter
的任务类型的类型别名。
[别名]
CustomTask::TaskDoneHandler
libstdc++ 中定义的类型别名,即 std::function<DoneResult(const Task &, DoneWith)>
或 DoneResult。
设计为自定义任务元素构造函数的可选参数的 TaskDoneHandler
。任何符合上述签名的函数,当作为任务完成处理器传递时,将由运行的任务树在任务执行完成后,在最终执行结果报告给父组之前调用。
在处理器的主体中,您可以检索已完成的任务中的最终数据。包括存储在内的额外参数可以通过lambda捕获传递给处理器。您还可以动态决定任务是否应该使用其返回值完成,或者最终结果是否应该进行调整。
DoneWith 参数是可选的,您的完成处理器可以省略它。当提供时,它包含将报告给父级的任务最终结果的信息。
如果您不打算从已完成的任务中读取任何数据,您可以省略 const Task &
参数。
返回的 DoneResult 值是可选的,您的处理器可以返回 void
而不是。在这种情况下,任务的最终结果将与 DoneWith 参数指示的值相等。当处理器返回 DoneResult 值时,任务最终结果可以在完成处理器主体内通过返回的值进行调整。
对于 DoneResult 类型的 TaskDoneHandler
,不会执行任何额外的处理,任务将无条件地使用传递的 DoneResult 参数值结束。
另请参阅 CustomTask(),TaskSetupHandler 和 GroupDoneHandler。
[别名]
CustomTask::TaskSetupHandler
为 std::function<SetupResult(Task &)>
的类型别名。
TaskSetupHandler
是自定义任务元素的构造函数的可选参数。任何与上述签名匹配的函数,当作为任务设置处理器传递时,将在任务创建后并且在开始之前由运行中的任务树调用。
在处理器主体内部,您可以根据您的需求配置任务。包括存储在内的额外参数可以通过lambda捕获传递给处理器。您可以动态决定任务是否应该启动或跳过,以成功或错误结束。
注意:不要在启动处理器中自行启动任务。将其留给 TaskTree,否则行为是未定义的。
处理器的返回值指示在处理器调用完成后运行的任务树如何继续。返回值 SetupResult::Continue 指示任务树继续运行,即执行相关的 Task
。返回值 SetupResult::StopWithSuccess 或 SetupResult::StopWithError 指示任务树跳过任务执行,并立即分别以成功或错误结束。
当返回类型为 SetupResult::StopWithSuccess 或 SetupResult::StopWithError 时,不调用任务的完成处理器(如果提供了的话)。
自定义任务的构造函数还接受 std::function<void(Task &)>
的简写形式,即返回值是 void
。在这种情况下,假设返回值是 SetupResult::Continue。
另请参阅 CustomTask(),TaskDoneHandler 和 GroupSetupHandler。
成员函数文档
模板 <typename SetupHandler = Tasking::CustomTask<Adapter>::TaskSetupHandler, typename DoneHandler = Tasking::CustomTask::TaskDoneHandler> CustomTask::CustomTask(SetupHandler &&setup = TaskSetupHandler(), DoneHandler &&done = TaskDoneHandler(), Tasking::CallDoneIf callDoneIf = CallDoneIf::SuccessOrError)
构建一个 CustomTask
实例,并将 setup 和 done 处理器附加到任务。当正在运行的任务树即将启动任务时,它实例化相关的Task对象,使用创建的任务的引用调用setup处理器,并启动它。当运行的任务完成时,任务树调用一个带有创建的任务常量引用的done处理器。
传递的setup处理器类型为TaskSetupHandler。例如
static void parseAndLog(const QString &input); ... const QString input = ...; const auto onFirstSetup = [input](ConcurrentCall<void> &task) { if (input == "Skip") return SetupResult::StopWithSuccess; // This task won't start, the next one will if (input == "Error") return SetupResult::StopWithError; // This task and the next one won't start task.setConcurrentCallData(parseAndLog, input); // This task will start, and the next one will start after this one finished with success return SetupResult::Continue; }; const auto onSecondSetup = [input](ConcurrentCall<void> &task) { task.setConcurrentCallData(parseAndLog, input); }; const Group group { ConcurrentCallTask<void>(onFirstSetup), ConcurrentCallTask<void>(onSecondSetup) };
done处理器类型为TaskDoneHandler。默认情况下,当任务完成时将调用done处理器。当您想要处理器只在执行成功或失败时调用时,请传递默认值以外的值给callDoneIf参数。
©2024 Qt公司版权所有。文档贡献属于各自的拥有者。本提供的文档根据Free Software Foundation发布、GNU自由文档许可版本1.3的条款进行许可。