Updated: October 28, 2024 |
QNX Neutrino lets you have a timeout associated with all kernel blocking states. We talked about the blocking states in the Processes and Threads chapter, in the section Kernel states. Most often, you'll want to use this with message passing; a client will send a message to a server, but the client won't want to wait forever for the server to respond. In that case, a kernel timeout is suitable. Kernel timeouts are also useful with the pthread_join() function. You might want to wait for a thread to finish, but you might not want to wait too long.
Here's the definition for the TimerTimeout() function call, which is the kernel function responsible for kernel timeouts:
#include <sys/neutrino.h> int TimerTimeout (clockid_t id, int flags, const struct sigevent *notify, const uint64_t *ntime, uint64_t *otime);
This says that TimerTimeout() returns an integer (a pass/fail indication, with -1 meaning the call failed and set errno, and zero indicating success). The time source (CLOCK_REALTIME, etc.) is passed in id, and the flags parameter gives the relevant kernel states. The notify value should always be a notification event of type SIGEV_UNBLOCK, and the ntime is the relative time when the kernel call should time out. The otime parameter indicates the previous value of the timeout—it's not used in the vast majority of cases (you can pass NULL).