AG_TIME(3)

NAME
AG_Time - agar time interface

SYNOPSIS

    #include <agar/core.h>

DESCRIPTION
These functions provide a low-level interface to monotonically increasing time sources. Different time backends may be implemented (see INTERNAL API below). Agar provides the following backends:

agTimeOps_dummy
    No-op, timers will be unavailable.
agTimeOps_posix
    Monotonic clock using clock_gettime() interface
agTimeOps_gettimeofday
    Traditional gettimeofday() interface.
agTimeOps_win32
    Windows winmm API.
agTimeOps_renderer
    Monotonic clock which stops while graphical rendering is performed. This is useful for applications performing offline rendering, where the outcome may be influenced by different threads relying on Agar timers or AG_Delay() calls.

INTERFACE
Uint32 AG_GetTicks(void)

void AG_Delay(Uint32 t)

void AG_SetTimeOps(const AG_TimeOps *ops)

The AG_GetTicks() function returns the current time in ticks. One tick usually corresponds to one millisecond.

The AG_Delay() function blocks the current thread, waiting at least t ticks before returning. The exact amount of time which AG_Delay() waits is backend-dependent.

The AG_SetTimeOps() function selects a time backend (see below).

BACKEND INTERFACE
The argument to AG_SetTimeOps() should point to the following structure:

    typedef struct ag_time_ops {
    	const char *name;
    	void   (*Init)(void);
    	void   (*Destroy)(void);
    	Uint32 (*GetTicks)(void);
    	void   (*Delay)(Uint32);
    } AG_TimeOps;

Init() performs any necessary initialization. Destroy() cleans up any allocated resources.

The GetTicks() operation is the backend to AG_GetTicks() and Delay() is the backend to AG_Delay().

EXAMPLES
The following code fragment selects the rendering-aware time backend, agTimeOps_renderer, if it is available:

    #include <agar/config/have_clock_gettime.h>
    #include <agar/config/have_pthreads.h>
    #if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_PTHREADS)
    AG_SetTimeOps(&agTimeOps_renderer);
    #endif

SEE ALSO
AG_Intro(3), AG_Timer(3)

HISTORY
The AG_Time interface first appeared in Agar 1.3.4