TimerThread.h File Reference
`#include "FreeList.h"`
`#include "LinkedList.h"`
`#include "ThreadPool.h"`
`#include "ithread.h"`
Include dependency graph for TimerThread.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | TIMERTHREAD
struct | TIMEREVENT

## Macros

#define | INVALID_EVENT_ID (-10 & 1 << 29)

## Typedefs

typedef enum timeoutType | TimeoutType
typedef struct TIMERTHREAD | TimerThread
typedef struct TIMEREVENT | TimerEvent

## Enumerations

enum | timeoutType { ABS_SEC , REL_SEC }

## Functions

int | TimerThreadInit (TimerThread *timer, ThreadPool *tp)
| Initializes and starts timer thread.
int | TimerThreadSchedule (TimerThread *timer, time_t time, TimeoutType type, ThreadPoolJob *job, Duration duration, int *id)
| Schedules an event to run at a specified time.
int | TimerThreadRemove (TimerThread *timer, int id, ThreadPoolJob *out)
| Removes an event from the timer Q.
int | TimerThreadShutdown (TimerThread *timer)
| Shutdown the timer thread.

## Typedef Documentation

## TimeoutType

typedef enum timeoutType TimeoutType

Timeout Types.

## TimerEvent

typedef struct TIMEREVENT TimerEvent

Struct to contain information for a timer event.

Internal to the TimerThread.

## TimerThread

typedef struct TIMERTHREAD TimerThread

A timer thread similar to the one in the Upnp SDK that allows the scheduling of a job to run at a specified time in the future.

Because the timer thread uses the thread pool there is no gurantee of timing, only approximate timing.

Uses ThreadPool, Mutex, Condition, Thread.

## Enumeration Type Documentation

## timeoutType

enum timeoutType

Timeout Types.

Enumerator
ABS_SEC | seconds from Jan 1, 1970.
REL_SEC | seconds from current time.

## Function Documentation

## TimerThreadInit()

int TimerThreadInit | ( | TimerThread * | timer,
|  | ThreadPool * | tp
| ) |  |

Initializes and starts timer thread.

Returns
  0 on success, nonzero on failure. Returns error from ThreadPoolAddPersistent on failure.

Parameters

  [in] | timer | Valid timer thread pointer.
  [in] | tp | Valid thread pool to use. Must be started. Must be valid for lifetime of timer. Timer must be shutdown BEFORE thread pool.

References ThreadPoolAddPersistent(), TimerThreadWorker(), TPJobInit(), and TPJobSetPriority().

Referenced by UpnpInitPreamble().

## TimerThreadRemove()

int TimerThreadRemove | ( | TimerThread * | timer,
|  | int | id,
|  | ThreadPoolJob * | out
| ) |  |

Removes an event from the timer Q.

Events can only be removed before they have been placed in the thread pool.

Returns
  0 on success, INVALID_EVENT_ID on failure.

Parameters

  [in] | timer | Valid timer thread pointer.
  [in] | id | Id of event to remove.
  [in] | out | Space for thread pool job.

References FreeTimerEvent().

Referenced by free_client_subscription(), and genaRenewSubscription().

## TimerThreadSchedule()

int TimerThreadSchedule | ( | TimerThread * | timer,
|  | time_t | time,
|  | TimeoutType | type,
|  | ThreadPoolJob * | job,
|  | Duration | duration,
|  | int * | id
| ) |  |

Schedules an event to run at a specified time.

Returns
  0 on success, nonzero on failure, EOUTOFMEM if not enough memory to schedule job.

Parameters

  [in] | timer | Valid timer thread pointer.
  [in] | time | time of event. Either in absolute seconds, or relative seconds in the future.
  [in] | type | either ABS_SEC, or REL_SEC. If REL_SEC, then the event will be scheduled at the current time + REL_SEC.
  [in] | job | Valid Thread pool job with following fields.
  [in] | duration | .
  [in] | id | Id of timer event. (out, can be null).

References CalculateEventTime(), CreateTimerEvent(), TIMEREVENT::eventTime, and FreeTimerEvent().

Referenced by ScheduleGenaAutoRenew(), SearchByTarget(), ssdp_handle_device_request(), and UpnpSendAdvertisementLowPower().

## TimerThreadShutdown()

int TimerThreadShutdown | ( | TimerThread * | timer | ) |

Shutdown the timer thread.

Events scheduled in the future will NOT be run.

Timer thread should be shutdown BEFORE it's associated thread pool.

Returns
  0 if succesfull, nonzero otherwise. Always returns 0.

Parameters

  [in] | timer | Valid timer thread pointer.

References FreeTimerEvent().

Referenced by UpnpFinish().