# Timeout

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

# Timeout

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

class Timeout
```

[Defined in src/base/include/icy/timeout.h:32](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L32)

> **Subclassed by:** [`TimedToken`](https://auscaster.com/icey/docs/api-reference/icy-TimedToken.md#timedtoken)

[Timeout](#timeout-1) counter which expires after a given delay. Delay is specified in milliseconds.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Timeout`](#timeout-2)  | Constructs a [Timeout](#timeout-1) with the given delay. |
|  | [`Timeout`](#timeout-3)  | Copy constructor. |
|  | [`Timeout`](#timeout-4) `noexcept` | Defaulted constructor. |
|  | [`~Timeout`](#timeout-5)  |  |
| `bool` | [`running`](#running-2) `const` | Returns true if the timer is currently running. |
| `void` | [`start`](#start-11)  | Starts (or restarts) the timer, recording the current time as the start point. |
| `void` | [`stop`](#stop-4)  | Stops the timer without resetting it. [expired()](#expired) will return false after this call. |
| `void` | [`reset`](#reset-8)  | Restarts the timer from now, equivalent to calling [start()](#start-11). |
| `long` | [`remaining`](#remaining) `const` | Returns the number of milliseconds remaining before expiry. Returns 0 if already expired, or the full delay if not running. |
| `bool` | [`expired`](#expired) `const` | Returns true if the timer is running and the delay has fully elapsed. |
| `void` | [`setDelay`](#setdelay) `inline` | Sets the expiry delay without restarting the timer. |
| `long` | [`delay`](#delay) `const` `inline` | Returns the configured delay in milliseconds. |
| [`Timeout`](#timeout-1) & | [`operator=`](#operator-104)  | Copy assignment operator. |
| [`Timeout`](#timeout-1) & | [`operator=`](#operator-105) `noexcept` | Defaulted assignment operator. |

---

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

### Timeout

```cpp
Timeout(long delay = 0, bool autoStart = false)
```

[Defined in src/base/include/icy/timeout.h:38](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L38)

Constructs a [Timeout](#timeout-1) with the given delay.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `delay` | `long` | Expiry duration in milliseconds (default: 0). |
| `autoStart` | `bool` | If true, starts the timer immediately on construction. |

---

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

### Timeout

```cpp
Timeout(const Timeout & src)
```

[Defined in src/base/include/icy/timeout.h:42](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L42)

Copy constructor.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `src` | const [`Timeout`](#timeout-1) & | Source [Timeout](#timeout-1) to copy state from. |

---

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

### Timeout

`noexcept`

```cpp
Timeout(Timeout && src) noexcept = default
```

[Defined in src/base/include/icy/timeout.h:44](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L44)

Defaulted constructor.

---

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

### ~Timeout

```cpp
~Timeout()
```

[Defined in src/base/include/icy/timeout.h:45](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L45)

---

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

### running

`const`

```cpp
bool running() const
```

[Defined in src/base/include/icy/timeout.h:49](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L49)

Returns true if the timer is currently running. 
#### Returns
true if [start()](#start-11) has been called and [stop()](#stop-4) has not.

---

<a id="start-11"></a>

### start

```cpp
void start()
```

[Defined in src/base/include/icy/timeout.h:52](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L52)

Starts (or restarts) the timer, recording the current time as the start point.

---

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

### stop

```cpp
void stop()
```

[Defined in src/base/include/icy/timeout.h:55](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L55)

Stops the timer without resetting it. [expired()](#expired) will return false after this call.

---

<a id="reset-8"></a>

### reset

```cpp
void reset()
```

[Defined in src/base/include/icy/timeout.h:58](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L58)

Restarts the timer from now, equivalent to calling [start()](#start-11).

---

<a id="remaining"></a>

### remaining

`const`

```cpp
long remaining() const
```

[Defined in src/base/include/icy/timeout.h:63](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L63)

Returns the number of milliseconds remaining before expiry. Returns 0 if already expired, or the full delay if not running. 
#### Returns
Milliseconds until expiry.

---

<a id="expired"></a>

### expired

`const`

```cpp
bool expired() const
```

[Defined in src/base/include/icy/timeout.h:67](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L67)

Returns true if the timer is running and the delay has fully elapsed. 
#### Returns
true if expired, false if stopped or not yet elapsed.

---

<a id="setdelay"></a>

### setDelay

`inline`

```cpp
inline void setDelay(long delay)
```

[Defined in src/base/include/icy/timeout.h:71](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L71)

Sets the expiry delay without restarting the timer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `delay` | `long` | New delay in milliseconds. |

---

<a id="delay"></a>

### delay

`const` `inline`

```cpp
inline long delay() const
```

[Defined in src/base/include/icy/timeout.h:75](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L75)

Returns the configured delay in milliseconds. 
#### Returns
Delay in milliseconds.

---

<a id="operator-104"></a>

### operator=

```cpp
Timeout & operator=(const Timeout & src)
```

[Defined in src/base/include/icy/timeout.h:79](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L79)

Copy assignment operator.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `src` | const [`Timeout`](#timeout-1) & | Source [Timeout](#timeout-1) to copy state from. |

---

<a id="operator-105"></a>

### operator=

`noexcept`

```cpp
Timeout & operator=(Timeout && src) noexcept = default
```

[Defined in src/base/include/icy/timeout.h:80](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L80)

Defaulted assignment operator.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::chrono::steady_clock::time_point` | [`_startAt`](#_startat)  |  |
| `long` | [`_delay`](#_delay)  |  |
| `bool` | [`_running`](#_running-1)  |  |

---

<a id="_startat"></a>

### _startAt

```cpp
std::chrono::steady_clock::time_point _startAt
```

[Defined in src/base/include/icy/timeout.h:83](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L83)

---

<a id="_delay"></a>

### _delay

```cpp
long _delay
```

[Defined in src/base/include/icy/timeout.h:84](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L84)

---

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

### _running

```cpp
bool _running
```

[Defined in src/base/include/icy/timeout.h:85](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timeout.h#L85)
