NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO
#include <time.h> #include <signal.h>int timer_create(clockid_t clock_id, struct sigevent * evp, timer_t * timerid);
The timer_create function creates a timer in the current actor and returns the identifier of the timer in timerid . This identifier is valid during the life of the actor unless deleted using timer_delete . The clock_id must be set to CLOCK_REALTIME, the system realtime clock, which is the timing base for the new timer. The timer is disarmed on return from timer_create .
The evp argument must point to a sigevent structure allocated by the caller. Within this structure, the sigev_notify member must be equal to SIGEV_THREAD, and the sigev_notify_function member must point to a caller-provided function to be executed when the timer expires. This notify function is formally defined as follows:
void notify_function(union sigval value); |
where the value argument is obtained from the sigev_value member of the sigevent structure. The sigevent structure and sigval union are defined as follows (in <signal.h>):
struct sigevent { int sigev_notify; int sigev_signo; /* not used */ union sigval sigev_value; void (*sigev_notify_function)(union sigval); }; union sigval { int sival_int; void* sival_ptr; }; |
At each timer expiration, the notify function is executed asynchronously in a separate handler thread associated with the timer. This handler thread is created automatically by timer_create and need not normally be manipulated by the user application. It is a pthread with detachstate set to PTHREAD_CREATE_DETACHED, a scheduling policy set to that of the caller of timer_create , and priority set one level higher than that of the caller of timer_create unless the caller's priority is already at the maximum for the policy (see pthread_create (3POSIX), pthread_attr_setdetachstate (3POSIX), pthread_attr_setschedparam (3POSIX), and sched_get_priority_max (3POSIX)). The handler thread is deleted automatically when the timer is deleted. If the thread is deleted for any other reason while its associated timer is still active, the timer will be disabled and further attempts to arm it will return an error (see timer_settime (3POSIX)).
The timer_delete function disarms (if necessary) and deletes the specified timer. If the associated notify function is still executing, it will be allowed to complete before the handler thread is deleted.
Upon successful completion, timer_create and timer_delete return zero. In case of error a value of -1 is returned and errno is set to indicate the error condition.
The clock_id argument specifies a clock other than CLOCK_REALTIME. The evp argument is NULL, or the referenced sigevent structure is not initialized as specified above ( timer_create only). The timerid argument is NULL ( timer_create ) or timerid does not reference a currently valid timer ( timer_delete ).
Insufficient system resources are available to satisfy the request ( timer_create only).
timer_create was called from a thread which is not a pthread.
A pointer argument contains an address outside the current actor's address space.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO