diff options
author | Christopher Faylor <me@cgf.cx> | 2003-09-07 05:18:01 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-09-07 05:18:01 +0000 |
commit | ed2287adcd6b16a0ef34defb443d5c61fc7830d7 (patch) | |
tree | 4b567ae87a505f3fb4bc5ba3329db06a1936df78 /winsup/cygwin/hires.h | |
parent | 6cce721b15c6ac75e7d6ae86a4354aa02bcf14d8 (diff) | |
download | cygnal-ed2287adcd6b16a0ef34defb443d5c61fc7830d7.tar.gz cygnal-ed2287adcd6b16a0ef34defb443d5c61fc7830d7.tar.bz2 cygnal-ed2287adcd6b16a0ef34defb443d5c61fc7830d7.zip |
* signal.cc (nanosleep): Improve test for valid values. Round delay up to
resolution. Fix test for negative remainder. Use timeGetTime through gtod.
(sleep): Round up return value. Christopher Faylor <cgf@redhat.com>
* hires.h (HIRES_DELAY_MAX): Define.
(hires_ms::minperiod): Declare static.
(hires_ms::resolution): New.
(hires_ms::dmsecs): New.
(hires_ms::prime): Return UINT.
(gtod): Declare.
* times.cc (hires_ms::prime): Always calculate minperiod and set it to 1 in
case of failure. Return minperiod.
(hires_ms::resolution): Define.
(hires_ms::~hires_ms): Delete.
(hires_ms::usecs): Check minperiod to prime.
(gtod) Define as global.
Diffstat (limited to 'winsup/cygwin/hires.h')
-rw-r--r-- | winsup/cygwin/hires.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/winsup/cygwin/hires.h b/winsup/cygwin/hires.h index b4599cb1b..df4c44c4a 100644 --- a/winsup/cygwin/hires.h +++ b/winsup/cygwin/hires.h @@ -13,11 +13,18 @@ details. */ #include <mmsystem.h> +/* Largest delay in ms for sleep and alarm calls. + Allow actual delay to exceed requested delay by 10 s. + Express as multiple of 1000 (i.e. seconds) + max resolution + The tv_sec argument in timeval structures cannot exceed + HIRES_DELAY_MAX / 1000 - 1, so that adding fractional part + and rounding won't exceed HIRES_DELAY_MAX */ +#define HIRES_DELAY_MAX (((UINT_MAX - 10000) / 1000) * 1000) + 10 + class hires_base { protected: int inited; - virtual void prime () {} public: virtual LONGLONG usecs (bool justdelta) {return 0LL;} virtual ~hires_base () {} @@ -37,9 +44,14 @@ class hires_ms : hires_base { DWORD initime_ms; LARGE_INTEGER initime_us; - UINT minperiod; - void prime (); + static UINT minperiod; + UINT prime (); public: LONGLONG usecs (bool justdelta); + UINT dmsecs () { return timeGetTime (); } + UINT resolution () { return minperiod ?: prime (); } + }; + +extern hires_ms gtod; #endif /*__HIRES_H__*/ |