mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Updating time duration functions.
This commit is contained in:
@@ -191,22 +191,9 @@ struct PosixThreadData @private
|
||||
void* arg;
|
||||
}
|
||||
|
||||
fn void! native_sleep_nano(ulong nano)
|
||||
fn void! native_sleep_nano(NanoDuration nano)
|
||||
{
|
||||
TimeSpec to = { .s = 0, .ns = (CLong)nano };
|
||||
if (libc::nanosleep(&to, null)) return ThreadFault.INTERRUPTED?;
|
||||
}
|
||||
|
||||
fn void! native_sleep_ms(ulong ms)
|
||||
{
|
||||
TimeSpec to = { .s = (Time_t)(ms / 1000), .ns = (CLong)((ms % 1000) * 1000_000) };
|
||||
if (libc::nanosleep(&to, null)) return ThreadFault.INTERRUPTED?;
|
||||
}
|
||||
|
||||
fn void! native_sleep(double s)
|
||||
{
|
||||
Time_t si = (Time_t)s;
|
||||
TimeSpec to = { .s = si, .ns = (CLong)((s - si) * 1000_000_000) };
|
||||
if (libc::nanosleep(&to, null)) return ThreadFault.INTERRUPTED?;
|
||||
if (nano <= 0) return;
|
||||
if (libc::nanosleep(&&nano.to_timespec(), null)) return ThreadFault.INTERRUPTED?;
|
||||
}
|
||||
|
||||
|
||||
@@ -317,20 +317,10 @@ fn bool NativeThread.equals(thread, NativeThread other)
|
||||
return win32::getThreadId(thread) == win32::getThreadId(other);
|
||||
}
|
||||
|
||||
/**
|
||||
* @require ms < uint.max "Too long sleep"
|
||||
**/
|
||||
fn void! native_sleep_ms(ulong ms)
|
||||
fn void! native_sleep_nano(NanoDuration ns)
|
||||
{
|
||||
if (win32::sleepEx((uint)ms, true) == win32::WAIT_IO_COMPLETION) return ThreadFault.INTERRUPTED?;
|
||||
}
|
||||
|
||||
fn void! native_sleep(double s)
|
||||
{
|
||||
return native_sleep_ms((uint)s * 1000);
|
||||
}
|
||||
|
||||
fn void! native_sleep_nano(ulong ns)
|
||||
{
|
||||
return native_sleep_ms(ns < 1000_000 ? 1 : ns / 1000_000);
|
||||
long ms = ns.to_ms();
|
||||
if (ms <= 0) return;
|
||||
if (ms > Win32_DWORD.max) ms = Win32_DWORD.max;
|
||||
if (win32::sleepEx((Win32_DWORD)ms, (Win32_BOOL)true) == win32::WAIT_IO_COMPLETION) return ThreadFault.INTERRUPTED?;
|
||||
}
|
||||
|
||||
@@ -68,6 +68,6 @@ macro void OnceFlag.call(&flag, OnceFn func) => NativeOnceFlag.call_once((Native
|
||||
macro void yield() => os::native_thread_yield();
|
||||
macro Thread current() => os::native_thread_current();
|
||||
macro void exit(int result) => os::native_thread_exit(result);
|
||||
macro void! sleep(double s) @maydiscard => os::native_sleep(s);
|
||||
macro void! sleep_ms(ulong ms) @maydiscard => os::native_sleep_ms(ms);
|
||||
macro void! sleep_ns(ulong ns) @maydiscard => os::native_sleep_nano(ns);
|
||||
macro void! sleep(Duration d) @maydiscard => os::native_sleep_nano(d.to_nano());
|
||||
macro void! sleep_ms(ulong ms) @maydiscard => sleep(time::ms(ms));
|
||||
macro void! sleep_ns(NanoDuration ns) @maydiscard => os::native_sleep_nano(ns);
|
||||
|
||||
Reference in New Issue
Block a user