70045e2544
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
26 lines
861 B
Rust
26 lines
861 B
Rust
//! Монотонные часы — B §8: lifecycle-таймеры/`Uptime` идут только вперёд, не прыгают при NTP/GPS-синке.
|
|
//! На Linux `Instant` опирается на `CLOCK_MONOTONIC`.
|
|
|
|
use std::sync::OnceLock;
|
|
use std::time::Instant;
|
|
|
|
static EPOCH: OnceLock<Instant> = OnceLock::new();
|
|
|
|
/// Секунды от первого обращения в процессе (монотонно). Достаточно для стаб-`Uptime` (v0).
|
|
pub fn monotonic_secs() -> u64 {
|
|
let epoch = *EPOCH.get_or_init(Instant::now);
|
|
epoch.elapsed().as_secs()
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn non_decreasing() {
|
|
let a = monotonic_secs();
|
|
let b = monotonic_secs();
|
|
assert!(b >= a, "монотонные секунды не должны идти назад");
|
|
}
|
|
}
|