10#if __has_include("defs.h")
74 criticalsection update;
89template <
class M,
class C = std::deque<M>>
103 virtual bool produce (
const M& obj, DWORD timeout = INFINITE)
105 if (
limit < INFINITE)
109 if (timeout != INFINITE)
112 while (std::queue<M, C>::size () >=
limit)
115 if (timeout != INFINITE)
117 int t_wait = timeout - (int)t.
msecLap ();
118 if (t_wait < 0 ||
prod_sema.wait (t_wait) == WAIT_TIMEOUT)
125 std::queue<M, C>::push (obj);
133 std::queue<M, C>::push (obj);
141 virtual bool consume (M& result,
int timeout = INFINITE)
143 if (timeout != INFINITE)
149 while (std::queue<M, C>::empty ())
152 t_wait = timeout - (int)t.
msecLap ();
154 if (t_wait <= 0 ||
cons_sema.wait (t_wait) == WAIT_TIMEOUT)
162 if (std::queue<M, C>::empty ())
169 if (!std::queue<M, C>::empty ())
174 result = std::queue<M, C>::front ();
175 std::queue<M, C>::pop ();
176 if (
limit != INFINITE)
187 return std::queue<M, C>::empty ();
194 return (std::queue<M, C>::size () ==
limit);
201 return std::queue<M, C>::size ();
bool empty()
Return true if queue is empty.
Definition syncque.h:184
virtual bool consume(M &result, int timeout=INFINITE)
Definition syncque.h:141
bool full()
Return true if queue is at capacity.
Definition syncque.h:191
semaphore prod_sema
producers' semaphore counts down until queue is full
Definition syncque.h:206
semaphore cons_sema
consumers' semaphore counts down until queue is empty
Definition syncque.h:207
size_t size()
Return queue size.
Definition syncque.h:198
criticalsection update
critical section protects queue's integrity
Definition syncque.h:208
size_t limit
maximum queue size
Definition syncque.h:205
virtual bool produce(const M &obj, DWORD timeout=INFINITE)
Definition syncque.h:103
async_queue(size_t limit_=INFINITE)
Crates a queue with the given maximum size.
Definition syncque.h:94
Lightweight inter-thread synchronization.
Definition critsect.h:27
virtual void enter()
Enter critical section.
Definition critsect.h:99
virtual void leave()
Leave critical section.
Definition critsect.h:111
Automatic wrapper for critical sections.
Definition critsect.h:71
Wrapper for Windows semaphore objects.
Definition semaphore.h:16
int signal(int count=1)
Signal a semaphore object.
Definition semaphore.cpp:40
Simple stopwatch timer (yet another one!)
Definition stopwatch.h:22
double msecLap()
Return number of milliseconds elapsed from start.
Definition stopwatch.cpp:41
void start()
Start the stopwatch.
Definition stopwatch.cpp:24
sync_queue()
Create a synchronous queue.
Definition syncque.h:39
void produce(const M &obj)
Put new element in queue.
Definition syncque.h:44
virtual void wait()
Wait for object to become signaled.
Definition syncbase.h:85
Definitions of mlib::criticalsection and mlib::lock classes.
Definition of mlib::semaphore class.
Definition of mlib::stopwatch class.