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
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