91 lines
2.2 KiB
Markdown
91 lines
2.2 KiB
Markdown
# TaskGroup::AddDependency
|
||
|
||
```cpp
|
||
void AddDependency(uint64_t taskId, uint64_t dependsOn);
|
||
```
|
||
|
||
为任务添加依赖关系。指定的任务 `taskId` 将在 `dependsOn` 任务完成后才会开始执行。
|
||
|
||
**参数:**
|
||
- `taskId` - 从属任务的 ID
|
||
- `dependsOn` - 被依赖任务的 ID,taskId 将在此任务完成后才执行
|
||
|
||
**返回:** 无
|
||
|
||
**线程安全:** ✅ 线程安全
|
||
|
||
**示例:**
|
||
|
||
```cpp
|
||
#include "XCEngine/Threading/TaskGroup.h"
|
||
#include "XCEngine/Threading/Task.h"
|
||
#include <iostream>
|
||
#include <memory>
|
||
|
||
using namespace XCEngine::Threading;
|
||
|
||
int main() {
|
||
TaskGroup group;
|
||
|
||
uint64_t loadData = group.AddTask(
|
||
[]() { std::cout << "Loading data...\n"; },
|
||
TaskPriority::High
|
||
);
|
||
|
||
uint64_t processData = group.AddTask(
|
||
[]() { std::cout << "Processing data...\n"; },
|
||
TaskPriority::Normal
|
||
);
|
||
|
||
uint64_t saveData = group.AddTask(
|
||
[]() { std::cout << "Saving data...\n"; },
|
||
TaskPriority::Low
|
||
);
|
||
|
||
group.AddDependency(processData, loadData);
|
||
group.AddDependency(saveData, processData);
|
||
|
||
std::cout << "Execution order: loadData -> processData -> saveData\n";
|
||
|
||
group.Wait();
|
||
return 0;
|
||
}
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [TaskGroup 总览](task-group.md) - 返回类总览
|
||
|
||
## 详细描述
|
||
|
||
`AddDependency` 方法用于设置任务间的依赖关系。`taskId` 指定的任务将等待 `dependsOn` 指定的任务完成后才能开始执行。
|
||
|
||
依赖关系必须在任务执行前设置,建议在所有任务添加完成后统一设置依赖。
|
||
|
||
## 参数
|
||
|
||
| 参数 | 类型 | 描述 |
|
||
|------|------|------|
|
||
| `taskId` | `uint64_t` | 依赖其他任务的任务ID |
|
||
| `dependsOn` | `uint64_t` | 被依赖的任务ID |
|
||
|
||
## 返回值
|
||
|
||
无
|
||
|
||
## 示例
|
||
|
||
```cpp
|
||
TaskGroup* group = TaskSystem::Get().CreateTaskGroup();
|
||
|
||
uint64_t loadData = group->AddTask([]() { /* 加载数据 */ });
|
||
uint64_t processData = group->AddTask([]() { /* 处理数据 */ });
|
||
uint64_t saveData = group->AddTask([]() { /* 保存数据 */ });
|
||
|
||
// processData必须在loadData完成后才能执行
|
||
group->AddDependency(processData, loadData);
|
||
|
||
// saveData必须在processData完成后才能执行
|
||
group->AddDependency(saveData, processData);
|
||
```
|