1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

time: use Duration(C.INT64_MAX) as infinite (#10539)

This commit is contained in:
Uwe Krüger
2021-06-22 11:17:44 +02:00
committed by GitHub
parent dd6591b2f5
commit 72358833e0
10 changed files with 49 additions and 24 deletions

View File

@@ -394,7 +394,7 @@ pub const (
second = Duration(1000 * millisecond)
minute = Duration(60 * second)
hour = Duration(60 * minute)
infinite = Duration(-1)
infinite = Duration(C.INT64_MAX)
)
// nanoseconds returns the duration as an integer number of nanoseconds.

View File

@@ -149,3 +149,15 @@ pub fn sleep(duration Duration) {
}
}
}
// some *nix system functions (e.g. `C.poll()`, C.epoll_wait()) accept an `int`
// value as *timeout in milliseconds* with the special value `-1` meaning "infinite"
pub fn (d Duration) sys_milliseconds() int {
if d > C.INT32_MAX * millisecond { // treat 2147483647000001 .. C.INT64_MAX as "infinite"
return -1
} else if d <= 0 {
return 0 // treat negative timeouts as 0 - consistent with Unix behaviour
} else {
return int(d / millisecond)
}
}

View File

@@ -225,3 +225,15 @@ pub fn wait(duration Duration) {
pub fn sleep(duration Duration) {
C.Sleep(int(duration / millisecond))
}
// some Windows system functions (e.g. `C.WaitForSingleObject()`) accept an `u32`
// value as *timeout in milliseconds* with the special value `u32(-1)` meaning "infinite"
pub fn (d Duration) sys_milliseconds() u32 {
if d >= u32(-1) * millisecond { // treat 4294967295000000 .. C.INT64_MAX as "infinite"
return u32(-1)
} else if d <= 0 {
return 0 // treat negative timeouts as 0 - consistent with Unix behaviour
} else {
return u32(d / millisecond)
}
}