6 个版本

0.1.6 2022 年 3 月 31 日
0.1.5 2022 年 3 月 29 日

#4 in #critical

每月下载量 21 次

MIT 许可证

26KB
705 代码行

cpm-rs

用于关键路径法计算的单个 crate。

Crates.io

功能

  • 预定义任务的文件解析器。 (可能以后会被移除。)
  • 关键路径计算。
  • 同一时间计算最大并行任务数。
  • 索引整数或浮点时间单位。

未来功能

  • 依赖循环检查。
  • 可移动任务。
  • 图形可视化。
  • 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