6 个版本
0.1.6 | 2022 年 3 月 31 日 |
---|---|
0.1.5 | 2022 年 3 月 29 日 |
#4 in #critical
每月下载量 21 次
26KB
705 代码行
cpm-rs
用于关键路径法计算的单个 crate。
功能
- 预定义任务的文件解析器。 (可能以后会被移除。)
- 关键路径计算。
- 同一时间计算最大并行任务数。
- 索引整数或浮点时间单位。
未来功能
- 依赖循环检查。
- 可移动任务。
- 图形可视化。
- crate 特性。
限制
- 不检查任务依赖中的循环。
- 不利用多线程进行路径计算。
- 递归路径计算没有深度/性能限制。
使用方法
示例 1:从文件中读取任务
fn main() {
let mut scheduler = scheduler::Scheduler::new();
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Please provide an input file path!");
exit(1);
}
match input_parser::parse_input_file(&args[1]) {
Ok(task_list) => { scheduler.schedule(task_list); },
Err(e) => {eprintln!("Error: {}", e); exit(1);},
}
}
示例 2:从代码中添加任务
fn main() {
let mut scheduler = Scheduler<i32>::new();
scheduler.add_task(CustomTask::new(
"Task_A".to_string()
, 1
, vec!{}
));
scheduler.add_task(CustomTask::new(
"Sidetask_B".to_string()
, 3
, vec!{"Task_A".to_string()}
));
scheduler.add_task(CustomTask::new(
"Sidetask_C".to_string()
, 2
, vec!{"Task_B".to_string()}
));
scheduler.add_task(CustomTask::new(
"Finish".to_string()
, 1
, vec!{"Sidetask_B".to_string(), "Sidetask_C".to_string()}
));
match scheduler.schedule() {
Ok(()) => {},
Err(e) => {eprintln!("Error: {}", e); exit(1);},
}
}
依赖
~3–13MB
~116K SLoC