21 #ifndef DDC_THREAD_QUEUE_H 22 #define DDC_THREAD_QUEUE_H 29 #define DDC_DEFAULT_THREAD_QUEUE_SIZE 256 74 : m_max_size(max_size)
76 pthread_mutex_init(&m_mutex, NULL);
77 pthread_cond_init(&m_condv_added, NULL);
78 pthread_cond_init(&m_condv_removed, NULL);
84 pthread_mutex_destroy(&m_mutex);
85 pthread_cond_destroy(&m_condv_added);
86 pthread_cond_destroy(&m_condv_removed);
101 pthread_mutex_lock(&m_mutex);
104 pthread_cond_wait(&m_condv_removed, &m_mutex);
107 m_queue.push_back(item);
108 pthread_cond_signal(&m_condv_added);
109 pthread_mutex_unlock(&m_mutex);
119 pthread_mutex_lock(&m_mutex);
120 while (m_queue.size() == 0) {
121 pthread_cond_wait(&m_condv_added, &m_mutex);
124 T item = m_queue.front();
127 pthread_cond_signal(&m_condv_removed);
128 pthread_mutex_unlock(&m_mutex);
138 pthread_mutex_lock(&m_mutex);
139 size_t sz = m_queue.size();
140 pthread_mutex_unlock(&m_mutex);
generic thread-safe queue template class should use POD or pointer types for message-type T ...
Definition: ddcThreadQueue.h:36
ddcThreadQueue(size_t max_size=256)
Definition: ddcThreadQueue.h:73
size_t size() const
Definition: ddcThreadQueue.h:136
~ddcThreadQueue()
Definition: ddcThreadQueue.h:82
void add(T item)
Definition: ddcThreadQueue.h:99
size_t m_max_size
maximum number of enqueued messages (default=DDC_DEFAULT_THREAD_QUEUE_SIZE: unlimited) ...
Definition: ddcThreadQueue.h:56
std::list< T > m_queue
underlying message queue
Definition: ddcThreadQueue.h:53
#define DDC_DEFAULT_THREAD_QUEUE_SIZE
Definition: ddcThreadQueue.h:29
pthread_cond_t m_condv_added
pthread condition variable for signalling queue insertions
Definition: ddcThreadQueue.h:62
T ItemT
message item type
Definition: ddcThreadQueue.h:43
pthread_mutex_t m_mutex
pthread mutex for locking queue access
Definition: ddcThreadQueue.h:59
pthread_cond_t m_condv_removed
pthread condition variable for signalling queue removals
Definition: ddcThreadQueue.h:65