5个不稳定版本

0.3.1 2020年9月11日
0.3.0 2020年9月11日
0.2.1 2020年9月11日
0.2.0 2020年9月10日
0.1.0 2020年9月10日

#571 in 操作系统


用于 timeouts

MIT 许可证

16KB
233

os_clock

在Unix家族系统上访问各种操作系统时钟(如每个线程的CPU时间、系统时钟、单调时钟等)。

use os_clock::{self, Clock};

let clock = cpu_clock_for_current_thread();
clock.get_time();

值得注意的是,可以从另一个线程访问一个线程的CPU时间时钟

let clock = cpu_clock_for_current_thread().unwrap();

loop {
    if clock.get_time().unwrap() > Duration::from_millis(5) {
        break;
    }
}

std::thread::spawn(move || {
    assert!(clock.get_time().unwrap() > Duration::from_millis(5));

    let self_clock = cpu_clock_for_current_thread().unwrap();
    assert!(self_clock.get_time().unwrap() < Duration::from_millis(1));
})
.join()
.unwrap();

兼容性

在最近的iOS、Mac以及定义了pthread_getcpuclockid的Unix家族系统(如大多数现代Linux)上运行。


lib.rs:

在Unix家族系统上访问各种操作系统时钟(如每个线程的CPU时间、系统时钟、单调时钟等)。

线程时钟

此crate具有唯一的可发送的每个线程CPU时钟

#
let clock = os_clock::cpu_clock_for_current_thread().unwrap();

let start_time = clock.get_time().unwrap();
// Do some work for 5ms...
assert!(clock.get_time().unwrap() > start_time + Duration::from_millis(5));

// Notably, a clock for the CPU time of one thread can be accessed from another thread:
std::thread::spawn(move || {
    assert!(clock.get_time().unwrap() > Duration::from_millis(5));

    let self_clock = os_clock::cpu_clock_for_current_thread().unwrap();
    assert!(self_clock.get_time().unwrap() < Duration::from_millis(1));
})
.join()

// Clocks count from the thread's spawn time
let new_clock = os_clock::cpu_clock_for_current_thread().unwrap();
assert!(new_clock.get_time().unwrap() > Duration::from_millis(5));

// Use a timer to start counting from the moment the timer is created
let timer = new_clock.start_timer().unwrap();
assert!(timer.elapsed().unwrap() < Duration::from_millis(1));
// Do some work for 5ms...
assert!(timer.elapsed().unwrap() > Duration::from_millis(5));

依赖关系

~0–1.8MB
~35K SLoC