TIMEOUT(9) OpenBSD Kernel Manual TIMEOUT(9)NAME
timeout_set, timeout_add, timeout_add_sec, timeout_add_msec,
timeout_add_nsec, timeout_add_usec, timeout_add_tv, timeout_add_ts,
timeout_add_bt, timeout_del, timeout_pending, timeout_initialized,
timeout_triggered - execute a function after a specified period of time
SYNOPSIS
#include <sys/types.h>
#include <sys/timeout.h>
void
timeout_set(struct timeout *to, void (*fn)(void *), void *arg);
void
timeout_add(struct timeout *to, int ticks);
void
timeout_del(struct timeout *to);
int
timeout_pending(struct timeout *to);
int
timeout_initialized(struct timeout *to);
int
timeout_triggered(struct timeout *to);
void
timeout_add_tv(struct timeout *to, struct timeval *);
void
timeout_add_ts(struct timeout *to, struct timespec *);
void
timeout_add_bt(struct timeout *to, struct bintime *);
void
timeout_add_sec(struct timeout *to, int sec);
void
timeout_add_msec(struct timeout *to, int msec);
void
timeout_add_usec(struct timeout *to, int usec);
void
timeout_add_nsec(struct timeout *to, int nsec);
DESCRIPTION
The timeout API provides a mechanism to execute a function at a given
time. The granularity of the time is limited by the granularity of the
hardclock(9) timer which executes hz(9) times a second. The function
will be called at softclock interrupt level.
It is the responsibility of the caller to provide these functions with
pre-allocated timeout structures. All functions in this API may be used
in interrupt context below splclock().
This API replaces the historic functions timeout() and untimeout().
The function timeout_set() prepares the timeout structure to to be used
in future calls to timeout_add() and timeout_del(). The timeout will be
prepared to call the function specified by the fn argument with a void *
argument given in the arg argument. Once initialized, the to structure
can be used repeatedly in timeout_add() and timeout_del() and does not
need to be reinitialized unless the function called and/or its argument
must change.
The function timeout_add() schedules the execution of the to timeout in
at least ticks/hz seconds. Negative values of ticks are illegal. If the
value is `0' it will, in the current implementation, be treated as `1',
but in the future it might cause an immediate timeout. The timeout in
the to argument must be already initialized by timeout_set() and may not
be used in calls to timeout_set() until it has timed out or been removed
with timeout_del(). If the timeout in the to argument is already
scheduled, the old execution time will be replaced by the new one.
The function timeout_del() will cancel the timeout in the argument to.
If the timeout has already executed or has never been added the call will
have no effect.
The timeout_pending() macro can be used to check if a timeout is
scheduled to run.
The timeout_initialized() macro can be used to check if a timeout has
been initialized.
The timeout_triggered() macro can be used to check if a timeout is
running or has been run. The timeout_add() and timeout_del() functions
clear the triggered state for that timeout.
When possible, use the timeout_add_tv(), timeout_add_ts(),
timeout_add_bt(), timeout_add_sec(), timeout_add_msec(),
timeout_add_usec(), and timeout_add_nsec() functions instead of
timeout_add(). Those functions add a timeout whilst converting the time
specified by the respective types.
CODE REFERENCES
These functions are implemented in the file sys/kern/kern_timeout.c.
SEE ALSOhz(9), hzto(9), splclock(9), tsleep(9), tvtohz(9)OpenBSD 4.9 April 21, 2009 OpenBSD 4.9