#clock #thread #time #action #delay #time-tracking #synchronization

已删除 thread_clock

一个用于在线程之间同步和延迟动作的crate

3 个不稳定版本

0.2.1 2023年8月3日
0.2.0 2022年10月26日
0.1.0 2022年10月25日

#28 in #actions

MIT 许可证

17KB
183

注意

此crate在跟踪时间方面非常不可靠。除此之外,如果您尝试在tokio中使用Thread Clock,程序可能会崩溃。

Thread Clock是我编写的一个程序,旨在获得更多编写代码的经验。因此,它可能不太高效或编写良好。

Thread Clock

Thread Clock允许您创建一个时钟,该时钟可以提供自启动以来经过的滴答数。

此时钟的目的是允许线程之间同步动作,因为时钟可以被克隆到任何地方运行。然而,由于每个滴答大约有+1.4ms的漂移,因此使用此时钟进行实际时间跟踪可能有点不确定。

示例

使用时钟进行计时

use thread_clock::Clock;

fn main() {
  let mut clock = Clock::new().unwrap();

  clock.start();

  clock.wait_for_time(50);

  let time = clock.stop().unwrap();

  assert_eq!(time, 51);
}

使用时钟进行线程同步

use thread_clock::Clock;
use std::thread;

fn main() {
  let mut clock = Clock::new().unwrap();

  clock.start();

  let mut time_receiver = clock.spawn_receiver();

  let handle = thread::spawn(move || {
    for _ in 0..5 {
      time_receiver.wait_for_tick();
    }

    let time = time_receiver.time();

    assert_eq!(time, 5);
  });

  for _ in 0..5 {
    clock.wait_for_tick();
  }

  let time = clock.time();

  assert_eq!(time, 5);

  let _ = handle.join();

  let final_time = clock.stop().unwrap();

  assert_eq!(final_time, 6);
}

依赖项

~2.4–4MB
~66K SLoC