24 #include "dcmtk/ofstd/ofcast.h"
32 namespace log4cplus {
namespace thread {
35 #define LOG4CPLUS_THROW_RTE(msg) \
36 do { detail::syncprims_throw_exception (msg, __FILE__, __LINE__); } while (0)
45 InitializeCriticalSection (&cs);
52 DeleteCriticalSection (&cs);
60 EnterCriticalSection (&cs);
66 Mutex::unlock ()
const
68 LeaveCriticalSection (&cs);
77 Semaphore::Semaphore (
unsigned max,
unsigned initial)
79 sem = CreateSemaphore (0, initial, max, 0);
81 LOG4CPLUS_THROW_RTE (
"Semaphore::Semaphore");
86 Semaphore::~Semaphore ()
90 if (! CloseHandle (sem))
91 LOG4CPLUS_THROW_RTE (
"Semaphore::~Semaphore");
100 Semaphore::unlock ()
const
102 DWORD ret = ReleaseSemaphore (sem, 1, 0);
104 LOG4CPLUS_THROW_RTE (
"Semaphore::unlock");
110 Semaphore::lock ()
const
112 DWORD ret = WaitForSingleObject (sem, INFINITE);
113 if (ret != WAIT_OBJECT_0)
114 LOG4CPLUS_THROW_RTE (
"Semaphore::lock");
123 ManualResetEvent::ManualResetEvent (
bool sig)
125 ev = CreateEvent (0,
true, sig, 0);
127 LOG4CPLUS_THROW_RTE (
"ManualResetEvent::ManualResetEvent");
132 ManualResetEvent::~ManualResetEvent ()
136 if (! CloseHandle (ev))
137 LOG4CPLUS_THROW_RTE (
"ManualResetEvent::~ManualResetEvent");
146 ManualResetEvent::signal ()
const
149 LOG4CPLUS_THROW_RTE (
"ManualResetEVent::signal");
155 ManualResetEvent::wait ()
const
157 DWORD ret = WaitForSingleObject (ev, INFINITE);
158 if (ret != WAIT_OBJECT_0)
159 LOG4CPLUS_THROW_RTE (
"ManualResetEvent::wait");
165 ManualResetEvent::timed_wait (
unsigned long msec)
const
167 DWORD ret = WaitForSingleObject (ev, OFstatic_cast(DWORD, msec));
177 LOG4CPLUS_THROW_RTE (
"ManualResetEvent::timed_wait");
187 ManualResetEvent::reset ()
const
189 if (! ResetEvent (ev))
190 LOG4CPLUS_THROW_RTE (
"ManualResetEvent::reset");
194 #undef LOG4CPLUS_THROW_RTE