# ipc::SyncQueue

<a id="syncqueue-3"></a>

# SyncQueue

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

template<typename TAction = ipc::Action>
class SyncQueue
```

[Defined in src/base/include/icy/ipc.h:137](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L137)

> **Inherits:** [`Action >`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6)

IPC synchronization queue is for passing templated actions between threads and the event loop we are synchronizing with.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`SyncQueue`](#syncqueue-4) | `function` | Declared here |
| [`~SyncQueue`](#syncqueue-5) | `function` | Declared here |
| [`close`](#close-25) | `function` | Declared here |
| [`post`](#post-2) | `function` | Declared here |
| [`sync`](#sync-1) | `function` | Declared here |
| [`_sync`](#_sync-1) | `variable` | Declared here |
| [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-7) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`~Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-8) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#push-5) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`pop`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#pop-1) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`runSync`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#runsync) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#close-24) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`post`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#post-1) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`waitForSync`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#waitforsync) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`_mutex`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#_mutex-14) | `variable` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |
| [`_actions`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#_actions) | `variable` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-6) |

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

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-7) `inline` |  |
| `function` | [`~Queue`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#queue-8) `virtual` `inline` |  |
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#push-5) `virtual` `inline` | Pushes an action onto the queue and triggers a post notification. Takes ownership of action; the queue deletes it after execution. Thread-safe. |
| `function` | [`pop`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#pop-1) `virtual` `inline` | Removes and returns the next action from the front of the queue. The caller takes ownership of the returned pointer. Thread-safe. |
| `function` | [`runSync`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#runsync) `virtual` `inline` | Drains the queue by invoking and deleting every pending action in order. Must be called from the thread that owns the event loop. |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#close-24) `virtual` `inline` | Closes the underlying notification handle. No-op in the base implementation. |
| `function` | [`post`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#post-1) `virtual` `inline` | Signals the event loop that new actions are available. No-op in the base implementation. |
| `function` | [`waitForSync`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#waitforsync) `inline` | Blocks the calling thread until the queue is empty or the timeout elapses. Polls every 10 ms. Logs a warning if the timeout is reached. |
| `variable` | [`_mutex`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#_mutex-14)  |  |
| `variable` | [`_actions`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#_actions)  |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`SyncQueue`](#syncqueue-4) `inline` | Constructs a [SyncQueue](#syncqueue-3) bound to the given libuv event loop. |
|  | [`~SyncQueue`](#syncqueue-5) `virtual` `inline` |  |
| `void` | [`close`](#close-25) `virtual` `inline` | Closes the underlying [Synchronizer](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer) handle and stops loop wakeups. |
| `void` | [`post`](#post-2) `virtual` `inline` | Wakes up the event loop so pending actions are dispatched via [runSync()](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#runsync). |
| [`Synchronizer`](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer) & | [`sync`](#sync-1) `virtual` `inline` | Returns a reference to the internal [Synchronizer](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer). |

---

<a id="syncqueue-4"></a>

### SyncQueue

`inline`

```cpp
inline SyncQueue(uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/base/include/icy/ipc.h:142](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L142)

Constructs a [SyncQueue](#syncqueue-3) bound to the given libuv event loop.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop to synchronize with (default: the process-wide default loop). |

---

<a id="syncqueue-5"></a>

### ~SyncQueue

`virtual` `inline`

```cpp
virtual inline ~SyncQueue()
```

[Defined in src/base/include/icy/ipc.h:147](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L147)

---

<a id="close-25"></a>

### close

`virtual` `inline`

```cpp
virtual inline void close()
```

[Defined in src/base/include/icy/ipc.h:150](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L150)

Closes the underlying [Synchronizer](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer) handle and stops loop wakeups.

#### Reimplements

- [`Queue::close`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#close-24)

---

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

### post

`virtual` `inline`

```cpp
virtual inline void post()
```

[Defined in src/base/include/icy/ipc.h:153](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L153)

Wakes up the event loop so pending actions are dispatched via [runSync()](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#runsync).

#### Reimplements

- [`Queue::post`](https://auscaster.com/icey/docs/api-reference/icy-ipc-Queue.md#post-1)

---

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

### sync

`virtual` `inline`

```cpp
virtual inline Synchronizer & sync()
```

[Defined in src/base/include/icy/ipc.h:157](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L157)

Returns a reference to the internal [Synchronizer](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer). 
#### Returns
Reference to the [Synchronizer](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer) used for loop wakeup.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`Synchronizer`](https://auscaster.com/icey/docs/api-reference/icy-Synchronizer.md#synchronizer) | [`_sync`](#_sync-1)  |  |

---

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

### _sync

```cpp
Synchronizer _sync
```

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

[Defined in src/base/include/icy/ipc.h:160](https://github.com/auscaster/icey/blob/main/src/base/include/icy/ipc.h#L160)
