NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO
#include <vtimer/chVtimer.h>int svThreadVirtualTimeoutSet(KnCap * actor, KnThreadLid threadli, KnVirtTimeout * vtimeout, KnTimeVal * cputime, int flag, KnLapDesc * lapdesc);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
VTIMER
The svThreadVirtualTimeoutSet() system call sets a timeout on the execution time of the thread whose local identifier is threadLi within the actor specified by actorcap .
Once the designated thread has consumed cputime of additional execution time, the LAP handler designated by lapdesc is invoked with vtimeout as its argument (see lapInvoke(2K) ).
If flag is set to K_VTIME_INTERNAL , only execution time in the actor that owns the thread is counted toward the timeout.
If flag is set to K_VTIME_TOTAL , all execution time is counted, regardless of whether or not the thread is executing in a cross-actor invocation.
The lapDesc argument is a LAP descriptor previously created by svLapCreate(2K) .
The KnVirtTimeout object is opaque. It must be pre-allocated by the caller but its fields are inaccessible to the caller. Virtual timeouts are always relative.
Virtual timeout handlers are not invoked at interrupt level. The execution environment is similar to that of an abort handler. The handler is executed by the affected thread, and has no restrictions on the use of system calls. A thread can be diverted to execute a handler only when executing in the actor that owns the thread. During any cross-actor invocation (trap, IPC, or LAP call), virtual timeout handler execution is masked.
When a thread is deleted, all the timeouts posted for this thread are implicitly cancelled.
The svThreadVirtualTimeoutCancel() system call attempts to cancel a virtual timeout request. The vtimeout argument contains the address of the KnVirtTimeout object used in the corresponding call to svThreadVirtualTimeoutSet() . If the timeout request is still pending, it is cancelled and the call returns K_EOK . If the virtual timeout interval has passed and the handler invocation has been posted, the call takes no action and returns K_ETIMEOUT . In the latter case, no information is available as to whether the handler execution had actually begun, nor whether the handler is still executing. A given timeout must not be cancelled a second time. This implies as well, that the timeouts of a thread which has been deleted previously, must not be cancelled.
A timeout cannot be reinstalled. To reinstall a timeout request, the timeout must be cancelled previously, otherwise unpredictable behaviour may occur).
On successful completion, svThreadVirtualTimeoutSet() and svThreadVirtualTimeoutCancel() return K_OK . Otherwise, a negative error code is returned.
The actor capability is not valid.
The actor is unreachable.
( svThreadVirtualTimeoutCancel() only) the virtual interval has already expired, and the handler has been queued for execution.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
lapInvoke(2K) , svActorVirtualTimeoutSet(2K) , svLapCreate(2K) , threadTimes(2K) , virtualTimeGetRes(2K)
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO