cwidget  0.5.17
Classes | Public Member Functions | List of all members
cwidget::threads::event_queue< T > Class Template Reference

A simple unbounded communications channel suitable for use as, eg, an event queue. More...

#include <event_queue.h>

Public Member Functions

 event_queue ()
 Create an empty queue. More...
 
void put (const T &t)
 Push the given value onto the event queue. More...
 
get ()
 Retrieve a single value from the event queue. More...
 
bool try_get (T &out)
 Retrieve a single value from the event queue if the queue is non-empty. More...
 
bool timed_get (T &out, const timespec &until)
 Retrieve a single value from the event queue, or fail if the time "until" is reached.
 
bool empty () const
 Return true if the event queue is currently empty. More...
 

Detailed Description

template<typename T>
class cwidget::threads::event_queue< T >

A simple unbounded communications channel suitable for use as, eg, an event queue.

Writers never block (except as necessary to maintain consistency), but readers block while the queue is empty. If there are multiple readers, they will receive results in an arbitrary order.

This implementation is safe and flexible, but not terribly efficient. For instance, readers and writers block each other out (other approaches can avoid this unless the queue is empty). In aptitude it's used for the global event queue, which doesn't get all that many deliveries, so it should be good enough. Just don't use it to stream bits off a network connection and then complain I didn't warn you!

Constructor & Destructor Documentation

◆ event_queue()

template<typename T>
cwidget::threads::event_queue< T >::event_queue ( )
inline

Create an empty queue.

Member Function Documentation

◆ empty()

template<typename T>
bool cwidget::threads::event_queue< T >::empty ( ) const
inline

Return true if the event queue is currently empty.

◆ get()

template<typename T>
T cwidget::threads::event_queue< T >::get ( )
inline

Retrieve a single value from the event queue.

References cwidget::threads::condition::wait().

Referenced by cwidget::toplevel::mainloop().

◆ put()

template<typename T>
void cwidget::threads::event_queue< T >::put ( const T &  t)
inline

Push the given value onto the event queue.

Referenced by cwidget::toplevel::post_event().

◆ try_get()

template<typename T>
bool cwidget::threads::event_queue< T >::try_get ( T &  out)
inline

Retrieve a single value from the event queue if the queue is non-empty.

Parameters
outthe location in which to store the retrieved value
Returns
true iff a value was retrieved.

Referenced by cwidget::toplevel::mainloop(), cwidget::toplevel::poll(), and cwidget::toplevel::shutdown().


The documentation for this class was generated from the following file: