#thread #control #execution #execution-status

线程控制

Rust 库,用于控制线程的执行/状态

3 个版本

使用旧的 Rust 2015

0.1.2 2017年4月27日
0.1.1 2016年9月21日
0.1.0 2016年9月21日

并发 中排名 795

Download history 260/week @ 2024-03-31 295/week @ 2024-04-07 275/week @ 2024-04-14 258/week @ 2024-04-21 149/week @ 2024-04-28 135/week @ 2024-05-05 153/week @ 2024-05-12 98/week @ 2024-05-19 241/week @ 2024-05-26 99/week @ 2024-06-02 167/week @ 2024-06-09 144/week @ 2024-06-16 111/week @ 2024-06-23 79/week @ 2024-06-30 141/week @ 2024-07-07 125/week @ 2024-07-14

每月下载量 481
3 个 Crates 中使用(直接使用 2 个)

MIT/Apache 协议

7KB
67 行(不包括注释)

线程控制库

缺少控制线程执行的 Rust 功能。

示例

use std::thread;
use thread_control::*;

fn main() {
    let (flag, control) = make_pair();
    let handle = thread::spawn(move || {
        while flag.alive() {
        }
    });
    assert_eq!(control.is_done(), false);
    control.stop(); // Also you can `control.interrupt()` it
    handle.join();
    assert_eq!(control.is_interrupted(), false);
    assert_eq!(control.is_done(), true);
}

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则任何有意提交以包含在本作品中的贡献,根据 Apache-2.0 许可证的定义,将双重许可如上所述,没有任何附加条款或条件。


lib.rs:

用于控制线程执行的库。

使用示例

use std::thread;
use thread_control::*;

fn main() {
    let (flag, control) = make_pair();
    let handle = thread::spawn(move || {
        while flag.alive() {
        }
    });
    assert_eq!(control.is_done(), false);
    control.stop();
    handle.join();
    assert_eq!(control.is_interrupted(), false);
    assert_eq!(control.is_done(), true);
}

中断示例

use std::thread;
use thread_control::*;

fn main() {
    let (flag, control) = make_pair();
    let handle = thread::spawn(move || {
        while flag.alive() {
        }
    });
    control.interrupt();
    handle.join();
    assert_eq!(control.is_interrupted(), true);
    assert_eq!(control.is_done(), true);
}

恐慌示例

use std::thread;
use thread_control::*;

fn main() {
    let (flag, control) = make_pair();
    let handle = thread::spawn(move || {
        while flag.alive() {
            panic!("PANIC!");
        }
    });
    handle.join();
    assert_eq!(control.is_interrupted(), true);
    assert_eq!(control.is_done(), true);
}

无运行时依赖