---
name: "ost_ThreadQueue"
section: "3"
platform: "linux"
package: "libcommoncpp2-doc"
version: "1.8.1-10"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/ost_ThreadQueue"
---

# ost\_ThreadQueue(3)

Somewhat generic queue processing class to establish a producer consumer queue.

## NAME

ost::ThreadQueue - Somewhat generic queue processing class to establish a producer consumer queue.

## SYNOPSIS

`#include <buffer.h>`

Inherits **ost::Mutex**, **ost::Thread**, and **ost::Semaphore**.

### Classes

struct **\_data**\

### Public Member Functions

**ThreadQueue** (const char \*id, int pri, size\_t stack=0)\
 Create instance of our queue and give it a process priority.  virtual **~ThreadQueue** ()\
 Destroy the queue.  void **setTimer** (**timeout\_t** **timeout**)\
 Set the queue timeout.  void **post** (const void \*data, unsigned len)\
 Put some unspecified data into this queue.

### Protected Types

typedef struct **ost::ThreadQueue::\_data** **data\_t**\

### Protected Member Functions

virtual void **final** ()\
 virtual void **startQueue** (void)\
 Start of dequeing.  virtual void **stopQueue** (void)\
 End of dequeing, we expect the queue is empty for now.  virtual void **onTimer** (void)\
 A derivable method to call when the timout is expired.  virtual void **runQueue** (void \*data)=0\
 Virtual callback method to handle processing of a queued data items.

### Protected Attributes

**timeout\_t** **timeout**\
 bool **started**\
 **data\_t** \* **first**\
 **data\_t** \* **last**\
 **String** **name**\

### Additional Inherited Members

## Detailed Description

Somewhat generic queue processing class to establish a producer consumer queue.

This may be used to buffer cdr records, or for other purposes where an in-memory queue is needed for rapid posting. This class is derived from **Mutex** and maintains a linked list. A thread is used to dequeue data and pass it to a callback method that is used in place of 'run' for each item present on the queue. The conditional is used to signal the run thread when new data is posted.

This class was changed by Angelo Naselli to have a timeout on the queue

in memory data queue interface.

**Author**

David Sugar dyfet@ostel.com

## Member Typedef Documentation

### typedef struct ost::ThreadQueue::\_data ost::ThreadQueue::data\_t` [protected]`

## Constructor & Destructor Documentation

### ost::ThreadQueue::ThreadQueue (const char \* id, int pri, size\_t stack = `0`)

Create instance of our queue and give it a process priority.

**Parameters**

*id* queue ID. \
 *pri* process priority. \
 *stack* stack size.

### virtual ost::ThreadQueue::~ThreadQueue ()` [virtual]`

Destroy the queue.

## Member Function Documentation

### virtual void ost::ThreadQueue::final ()` [protected]`, ` [virtual]`

Reimplemented from **ost::Thread**.

### virtual void ost::ThreadQueue::onTimer (void)` [protected]`, ` [virtual]`

A derivable method to call when the timout is expired.

### void ost::ThreadQueue::post (const void \* data, unsigned len)

Put some unspecified data into this queue. A new qd structure is created and sized to contain a copy of the actual content.

**Parameters**

*data* pointer to data. \
 *len* size of data.

### virtual void ost::ThreadQueue::runQueue (void \* data)` [protected]`, ` [pure virtual]`

Virtual callback method to handle processing of a queued data items. After the item is processed, it is deleted from memory. We can call multiple instances of runQueue in order if multiple items are waiting.

**Parameters**

*data* item being dequed.

### void ost::ThreadQueue::setTimer (timeout\_t timeout)

Set the queue timeout. When the timer expires, the **onTimer()** method is called for the thread

**Parameters**

*timeout* timeout in milliseconds.

### virtual void ost::ThreadQueue::startQueue (void)` [protected]`, ` [virtual]`

Start of dequeing. Maybe we need to connect a database or something, so we have a virtual...

### virtual void ost::ThreadQueue::stopQueue (void)` [protected]`, ` [virtual]`

End of dequeing, we expect the queue is empty for now. Maybe we need to disconnect a database or something, so we have another virtual.

## Member Data Documentation

### data\_t\* ost::ThreadQueue::first` [protected]`

### data\_t \* ost::ThreadQueue::last` [protected]`

### String ost::ThreadQueue::name` [protected]`

### bool ost::ThreadQueue::started` [protected]`

### timeout\_t ost::ThreadQueue::timeout` [protected]`

## Author

Generated automatically by Doxygen for GNU CommonC++ from the source code.
