diff --git a/library/std/src/sys/thread/mod.rs b/library/std/src/sys/thread/mod.rs index 381031e318c97..5010774dafde2 100644 --- a/library/std/src/sys/thread/mod.rs +++ b/library/std/src/sys/thread/mod.rs @@ -91,7 +91,7 @@ cfg_select! { } target_os = "vexos" => { mod vexos; - pub use vexos::{sleep, yield_now}; + pub use vexos::{sleep, sleep_until, yield_now}; #[expect(dead_code)] mod unsupported; pub use unsupported::{Thread, available_parallelism, current_os_id, set_name, DEFAULT_MIN_STACK_SIZE}; @@ -135,6 +135,8 @@ cfg_select! { target_os = "vxworks", target_os = "wasi", target_vendor = "apple", + target_os = "motor", + target_os = "vexos" )))] pub fn sleep_until(deadline: crate::time::Instant) { use crate::time::Instant; diff --git a/library/std/src/sys/thread/motor.rs b/library/std/src/sys/thread/motor.rs index 3c6df936b0ae7..c6a7b5ac356b3 100644 --- a/library/std/src/sys/thread/motor.rs +++ b/library/std/src/sys/thread/motor.rs @@ -3,7 +3,7 @@ use crate::io; use crate::num::NonZeroUsize; use crate::sys::map_motor_error; use crate::thread::ThreadInit; -use crate::time::Duration; +use crate::time::{Duration, Instant}; pub const DEFAULT_MIN_STACK_SIZE: usize = 1024 * 256; @@ -62,3 +62,7 @@ pub fn yield_now() { pub fn sleep(dur: Duration) { moto_rt::thread::sleep_until(moto_rt::time::Instant::now() + dur) } + +pub fn sleep_until(deadline: Instant) { + moto_rt::thread::sleep_until(deadline.into_inner()) +} diff --git a/library/std/src/sys/thread/vexos.rs b/library/std/src/sys/thread/vexos.rs index d917dde4d0bc1..4311786720c45 100644 --- a/library/std/src/sys/thread/vexos.rs +++ b/library/std/src/sys/thread/vexos.rs @@ -10,8 +10,12 @@ pub fn sleep(dur: Duration) { let start = Instant::now(); while start.elapsed() < dur { - unsafe { - vex_sdk::vexTasksRun(); - } + yield_now(); + } +} + +pub fn sleep_until(deadline: Instant) { + while Instant::now() < deadline { + yield_now(); } }