you need a kernel with low-latency patch.
To allow thread to change priority to rt, you need (choose one):
pthread_attr_init(&attr); result = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); result = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); result = pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
struct sched_param rtparam; int x; memset (&rtparam, 0, sizeof (rtparam)); rtparam.sched_priority = priority; if ((x = pthread_setschedparam (thread, SCHED_FIFO, &rtparam)) != 0) { return -1; }
//autostart the thread pthread_attr_setdetachstate //inherit attr for the thread from parent pthread_attr_setinheritsched //set the thread type and it's priority //priority only for FIFO or RR pthread_attr_setschedparam //set the thread type (round robin, fifo, sporadic, etc...) //SCHED_FIFO (only blocking function or preemption from higher priority thread can stop the current thread) //SCHED_RR (same as fifo, but the thread only run for one time quantum) //SCHED_OTHER (tout pourri algorithme inside) //SCHED_SPORADIC (there is a minimal time between to activation of the task (periodic task are sporadic with inter-arrival) pthread_attr_setschedpolicy //set the scope (system or process) pthread_attr_setscope //configure the stack pthread_attr_setstack