diff options
author | Matthew Newhook <matthew@zeroc.com> | 2002-04-22 22:16:29 +0000 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2002-04-22 22:16:29 +0000 |
commit | b3926429557017367ad4c92d8fd42f17786e8c61 (patch) | |
tree | 38fc04618f3a8d0e280ac6da0b1f863677e3d012 /cpp/src/IceUtil/Cond.cpp | |
parent | Added IceUtil/Time.h (diff) | |
download | ice-b3926429557017367ad4c92d8fd42f17786e8c61.tar.bz2 ice-b3926429557017367ad4c92d8fd42f17786e8c61.tar.xz ice-b3926429557017367ad4c92d8fd42f17786e8c61.zip |
time updates.
Diffstat (limited to 'cpp/src/IceUtil/Cond.cpp')
-rw-r--r-- | cpp/src/IceUtil/Cond.cpp | 67 |
1 files changed, 31 insertions, 36 deletions
diff --git a/cpp/src/IceUtil/Cond.cpp b/cpp/src/IceUtil/Cond.cpp index c08559d8d28..867d153224c 100644 --- a/cpp/src/IceUtil/Cond.cpp +++ b/cpp/src/IceUtil/Cond.cpp @@ -30,14 +30,23 @@ IceUtil::Semaphore::~Semaphore() CloseHandle(_sem); } -bool -IceUtil::Semaphore::wait(long timeout) const +void +IceUtil::Semaphore::wait() const { - if (timeout < 0) + int rc = WaitForSingleObject(_sem, INFINITE); + if (rc != WAIT_OBJECT_0) { - timeout = INFINITE; + throw SyscallException(SyscallException::errorToString(GetLastError()), __FILE__, __LINE__); } - int rc = WaitForSingleObject(_sem, timeout); +} + +bool +IceUtil::Semaphore::timedWait(const Time& timeout) const +{ + timeval tv = timeout; + long msec = (tv.tv_sec * 1000) + (tv.tv_usec / 1000); + + int rc = WaitForSingleObject(_sem, msec); if (rc != WAIT_TIMEOUT && rc != WAIT_OBJECT_0) { throw SyscallException(SyscallException::errorToString(GetLastError()), __FILE__, __LINE__); @@ -152,12 +161,27 @@ IceUtil::Cond::postWait(bool timedOut) const } } +void +IceUtil::Cond::dowait() const +{ + try + { + _queue.wait(); + postWait(false); + } + catch(...) + { + postWait(false); + throw; + } +} + bool -IceUtil::Cond::dowait(long timeout) const +IceUtil::Cond::timedDowait(const Time& timeout) const { try { - bool rc = _queue.wait(timeout); + bool rc = _queue.timedWait(timeout); postWait(!rc); return rc; } @@ -206,33 +230,4 @@ IceUtil::Cond::broadcast() } } -namespace IceUtil -{ - -struct timespec -msecToTimespec( - long timeout -) -{ - assert(timeout >= 0); - struct timeval tv; - gettimeofday(&tv, 0); - // 123456789 - 10^9 - const long oneBillion = 1000000000; - - struct timespec abstime; - - abstime.tv_sec = tv.tv_sec + (timeout/1000); - abstime.tv_nsec = (tv.tv_usec * 1000) + ((timeout%1000) * 1000000); - if (abstime.tv_nsec > oneBillion) - { - ++abstime.tv_sec; - abstime.tv_nsec -= oneBillion; - } - - return abstime; -} - -} // End namespace IceUtil - #endif |