# AsyncQueue

<a id="asyncqueue"></a>

# AsyncQueue

```cpp
#include <icy/queue.h>

template<class T>
class AsyncQueue
```

[Defined in src/base/include/icy/queue.h:349](https://github.com/auscaster/icey/blob/main/src/base/include/icy/queue.h#L349)

> **Inherits:** [`RunnableQueue< T >`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue)
> **Subclassed by:** [`AsyncPacketQueue< PacketT >`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue), [`PlanarAudioPacket >`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue), [`AsyncPacketQueue< VisionFramePacket >`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue), [`AsyncPacketQueue< T >`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue)

[AsyncQueue](#asyncqueue) is a thread-based queue which receives packets from any thread source and dispatches them asynchronously.

This queue is useful for deferring load from operation critical system devices before performing long running tasks.

The thread will call the [RunnableQueue](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue)'s [run()](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#run-4) method to constantly flush outgoing packets until [cancel()](#cancel) is called.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`AsyncQueue`](#asyncqueue-1) | `function` | Declared here |
| [`cancel`](#cancel) | `function` | Declared here |
| [`_thread`](#_thread-2) | `variable` | Declared here |
| [`~AsyncQueue`](#asyncqueue-2) | `function` | Declared here |
| [`Queue`](#queue-1) | `typedef` | Declared here |
| [`ondispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#ondispatch) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-1) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`~RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-2) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#push-2) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`flush`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#flush-1) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`clear`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#clear-4) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`run`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#run-4) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`runTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runtimeout) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`dispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatch-1) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#timeout) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`setTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#settimeout) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dropped) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`_limit`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_limit-2) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`_timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_timeout) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`_dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_dropped) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-3) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-79) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-4) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-80) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`popNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#popnext) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`dispatchNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatchnext) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push-1) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`empty`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#empty-3) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`front`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#front) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`back`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#back) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`pop`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#pop) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`sort`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#sort) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`size`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#size-6) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-3) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`_queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_queue) | `variable` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`_mutex`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_mutex-4) | `variable` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-1) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`~Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-2) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`cancelled`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancelled-3) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`exit`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#exit) | `variable` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |

## Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`ondispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#ondispatch)  | The default dispatch function. Must be set before the queue is running. |
| `function` | [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-1) `inline` |  |
| `function` | [`~RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-2) `virtual` `inline` |  |
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#push-2) `virtual` `inline` | Push an item onto the queue. The queue takes ownership of the item pointer. |
| `function` | [`flush`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#flush-1) `virtual` `inline` | Flush all outgoing items. |
| `function` | [`clear`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#clear-4) `inline` |  |
| `function` | [`run`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#run-4) `virtual` `inline` `override` | Called asynchronously to dispatch queued items. If not timeout is set this method blocks until [cancel()](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) is called, otherwise [runTimeout()](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runtimeout) will be called. |
| `function` | [`runTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runtimeout) `virtual` `inline` | Called asynchronously to dispatch queued items until the queue is empty or the timeout expires. Pseudo protected for std::bind compatability. |
| `function` | [`dispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatch-1) `virtual` `inline` | Dispatch a single item to listeners. |
| `function` | [`timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#timeout) `inline` |  |
| `function` | [`setTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#settimeout) `inline` | Sets the dispatch timeout. Must only be called when the queue is empty. |
| `function` | [`dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dropped) `const` `inline` |  |
| `variable` | [`_limit`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_limit-2)  |  |
| `variable` | [`_timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_timeout)  |  |
| `variable` | [`_dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_dropped)  |  |
| `function` | [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-3)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-79)  | Deleted assignment operator. |
| `function` | [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-80)  | Deleted assignment operator. |
| `function` | [`popNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#popnext) `virtual` `inline` | Pops the next waiting item. |
| `function` | [`dispatchNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatchnext) `virtual` `inline` | Pops and dispatches the next waiting item. |

## Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push) `inline` | Appends an item to the back of the queue (thread-safe). |
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push-1) `inline` | Appends an item to the back of the queue by move (thread-safe). |
| `function` | [`empty`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#empty-3) `const` `inline` |  |
| `function` | [`front`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#front) `const` `inline` |  |
| `function` | [`back`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#back) `const` `inline` |  |
| `function` | [`pop`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#pop) `inline` | Removes the front item from the queue (thread-safe). |
| `function` | [`sort`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#sort) `inline` | Sorts all queued items using the given comparator (thread-safe). |
| `function` | [`size`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#size-6) `const` `inline` |  |
| `function` | [`queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-3) `const` `inline` |  |
| `variable` | [`_queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_queue)  |  |
| `variable` | [`_mutex`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_mutex-4)  |  |

## Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-1) `inline` |  |
| `function` | [`~Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-2) `virtual` | Defaulted destructor. |
| `function` | [`run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) `virtual` | The run method will be called by the asynchronous context. |
| `function` | [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) `virtual` `inline` | Cancel the current task. The [run()](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) method should return ASAP. |
| `function` | [`cancelled`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancelled-3) `virtual` `const` `inline` | Returns true when the task has been cancelled. |
| `variable` | [`exit`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#exit)  |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`AsyncQueue`](#asyncqueue-1) `inline` |  |
| `void` | [`cancel`](#cancel) `virtual` `inline` `override` | Cancels the queue and joins the dispatch thread. |

---

<a id="asyncqueue-1"></a>

### AsyncQueue

`inline`

```cpp
inline AsyncQueue(int limit = 2048)
```

[Defined in src/base/include/icy/queue.h:355](https://github.com/auscaster/icey/blob/main/src/base/include/icy/queue.h#L355)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `limit` | `int` | Maximum number of queued items before oldest are dropped. |

---

<a id="cancel"></a>

### cancel

`virtual` `inline` `override`

```cpp
virtual inline void cancel(bool flag = true) override
```

[Defined in src/base/include/icy/queue.h:363](https://github.com/auscaster/icey/blob/main/src/base/include/icy/queue.h#L363)

Cancels the queue and joins the dispatch thread.

#### Reimplements

- [`Runnable::cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `flag` | `bool` | True to cancel, false to un-cancel. |

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`Thread`](https://auscaster.com/icey/docs/api-reference/icy-Thread.md#thread-1) | [`_thread`](#_thread-2)  |  |

---

<a id="_thread-2"></a>

### _thread

```cpp
Thread _thread
```

Type: [`Thread`](https://auscaster.com/icey/docs/api-reference/icy-Thread.md#thread-1)

[Defined in src/base/include/icy/queue.h:379](https://github.com/auscaster/icey/blob/main/src/base/include/icy/queue.h#L379)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`~AsyncQueue`](#asyncqueue-2) `virtual` `inline` |  |

---

<a id="asyncqueue-2"></a>

### ~AsyncQueue

`virtual` `inline`

```cpp
virtual inline ~AsyncQueue()
```

[Defined in src/base/include/icy/queue.h:371](https://github.com/auscaster/icey/blob/main/src/base/include/icy/queue.h#L371)

## Public Types

| Name | Description |
|------|-------------|
| [`Queue`](#queue-1)  |  |

---

<a id="queue-1"></a>

### Queue

```cpp
using Queue = RunnableQueue< T >
```

Type: [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue)< T >

[Defined in src/base/include/icy/queue.h:352](https://github.com/auscaster/icey/blob/main/src/base/include/icy/queue.h#L352)
