From 04cf5344111c357ad80335b88709281bb4bfaa0a Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 12 Mar 2015 20:36:31 -0700 Subject: std: Implement `thread::sleep` This function is the current replacement for `std::old_io::timer` which will soon be deprecated. This function is unstable and has its own feature gate as it does not yet have an RFC nor has it existed for very long. --- src/libstd/sys/windows/thread.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/libstd/sys/windows') diff --git a/src/libstd/sys/windows/thread.rs b/src/libstd/sys/windows/thread.rs index b361faba0f6..d1d4ad90081 100644 --- a/src/libstd/sys/windows/thread.rs +++ b/src/libstd/sys/windows/thread.rs @@ -20,6 +20,7 @@ use ptr; use sys_common::stack::RED_ZONE; use sys_common::thread::*; use thunk::Thunk; +use time::Duration; pub type rust_thread = HANDLE; @@ -82,6 +83,20 @@ pub unsafe fn yield_now() { SwitchToThread(); } +pub fn sleep(dur: Duration) { + unsafe { + if dur < Duration::zero() { + return yield_now() + } + let ms = dur.num_milliseconds(); + // if we have a fractional number of milliseconds then add an extra + // millisecond to sleep for + let extra = dur - Duration::milliseconds(ms); + let ms = ms + if extra.is_zero() {0} else {1}; + Sleep(ms as DWORD); + } +} + #[allow(non_snake_case)] extern "system" { fn CreateThread(lpThreadAttributes: LPSECURITY_ATTRIBUTES, @@ -92,4 +107,5 @@ extern "system" { lpThreadId: LPDWORD) -> HANDLE; fn WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: DWORD) -> DWORD; fn SwitchToThread() -> BOOL; + fn Sleep(dwMilliseconds: DWORD); } -- cgit 1.4.1-3-g733a5